message handling on receiving
parent
83dad1ba08
commit
d8b0156bdf
|
@ -17,18 +17,20 @@ public class KraSocketClient {
|
|||
@Getter
|
||||
private final SocketClient socketClient;
|
||||
private KraSocketClientEventInitiater kraSocketClientEventInitiater;
|
||||
|
||||
public KraSocketClient(KraSocketClientConfig kraSocketClientConfig, KraSocketClientEventInterface kraSocketClientEventInterface, KraSocketClientProtocol kraSocketClientProtocol) throws URISyntaxException {
|
||||
|
||||
public KraSocketClient(KraSocketClientConfig kraSocketClientConfig,
|
||||
KraSocketClientEventInterface kraSocketClientEventInterface,
|
||||
KraSocketClientProtocol kraSocketClientProtocol) throws URISyntaxException {
|
||||
this.kraSocketClientConfig = kraSocketClientConfig;
|
||||
|
||||
this.kraSocketClientEventInitiater = new KraSocketClientEventInitiater();
|
||||
this.kraSocketClientEventInitiater.addListener(kraSocketClientEventInterface);
|
||||
|
||||
this.socketClient = new SocketClient(new URI(this.kraSocketClientConfig.getWebSocketProtocol()
|
||||
+"://" + this.kraSocketClientConfig.getWebSocketHost() + ":"
|
||||
+ "://" + this.kraSocketClientConfig.getWebSocketHost() + ":"
|
||||
+ this.kraSocketClientConfig.getWebSocketPort()
|
||||
+ "/ws?ak=" + this.kraSocketClientConfig.getWebSocketAccessKey()
|
||||
+ "&s="+ this.kraSocketClientConfig.getWebSocketServerName()),
|
||||
+ "&s=" + this.kraSocketClientConfig.getWebSocketServerName()),
|
||||
this.kraSocketClientEventInitiater, kraSocketClientProtocol);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,8 +1,9 @@
|
|||
package earth.krakatao;
|
||||
|
||||
import earth.krakatao.events.KraSocketClientEventInitiater;
|
||||
import earth.krakatao.protocol.KraSocketClientProtocol;
|
||||
import earth.krakatao.protocol.KraSocketClientProtocolMessage;
|
||||
import earth.krakatao.events.KraSocketClientEventInitiater;
|
||||
import earth.krakatao.protocol.KraSocketClientProtocolStatus;
|
||||
import java.net.URI;
|
||||
import java.nio.ByteBuffer;
|
||||
import org.java_websocket.client.WebSocketClient;
|
||||
|
@ -13,7 +14,8 @@ public class SocketClient extends WebSocketClient {
|
|||
private final KraSocketClientProtocol kraProtocol;
|
||||
private final KraSocketClientEventInitiater kraSocketClientEventInitiater;
|
||||
|
||||
public SocketClient(URI serverUri, KraSocketClientEventInitiater kraSocketClientEventInitiater, KraSocketClientProtocol kraProtocol) {
|
||||
public SocketClient(URI serverUri, KraSocketClientEventInitiater kraSocketClientEventInitiater,
|
||||
KraSocketClientProtocol kraProtocol) {
|
||||
super(serverUri);
|
||||
|
||||
this.kraSocketClientEventInitiater = kraSocketClientEventInitiater;
|
||||
|
@ -44,7 +46,34 @@ public class SocketClient extends WebSocketClient {
|
|||
|
||||
@Override
|
||||
public void onMessage(ByteBuffer byteBuffer) {
|
||||
KraSocketClientProtocolMessage kraProtocolMessage = new KraSocketClientProtocol().DecodeMessage(byteBuffer.array());
|
||||
KraSocketClientProtocolMessage kraProtocolMessage = new KraSocketClientProtocol().DecodeMessage(
|
||||
byteBuffer.array());
|
||||
|
||||
if (kraProtocolMessage.getStatus() == KraSocketClientProtocolStatus.ERROR_NO_PERMS.getStatus()
|
||||
|| kraProtocolMessage.getStatus()
|
||||
== KraSocketClientProtocolStatus.ERROR_TRY_AGAIN.getStatus()
|
||||
|| kraProtocolMessage.getStatus()
|
||||
== KraSocketClientProtocolStatus.ERROR_ARG_LEN_TOO_BIG.getStatus()) {
|
||||
|
||||
KraSocketClient.getLogger().warning("error! status: " + kraProtocolMessage.getStatus());
|
||||
return;
|
||||
}
|
||||
|
||||
if (kraProtocolMessage.getStatus() == KraSocketClientProtocolStatus.REPLY.getStatus()
|
||||
&& this.kraProtocol.getCmdIDs().contains(kraProtocolMessage.getCmdID())) {
|
||||
// TODO: uuid
|
||||
kraProtocolMessage = new KraSocketClientProtocolMessage(
|
||||
KraSocketClientProtocolStatus.MESSAGE_ALREADY_IN_QUEUE.getStatus(), 1, 0,
|
||||
"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb", (short) kraProtocolMessage.getCmdNumber(), "");
|
||||
|
||||
this.SendMessage(kraProtocolMessage);
|
||||
return;
|
||||
}
|
||||
|
||||
if (kraProtocolMessage.getStatus() == KraSocketClientProtocolStatus.GET.getStatus()
|
||||
&& this.kraProtocol.getCmdIDs().contains(kraProtocolMessage.getCmdID())) {
|
||||
this.kraProtocol.getCmdIDs().remove(kraProtocolMessage.getCmdID());
|
||||
}
|
||||
|
||||
this.kraSocketClientEventInitiater.callOnMessage(kraProtocolMessage);
|
||||
}
|
||||
|
@ -52,7 +81,8 @@ public class SocketClient extends WebSocketClient {
|
|||
@Override
|
||||
public void onClose(int code, String reason, boolean remote) {
|
||||
this.kraSocketClientEventInitiater.callOnClose(code, reason, remote);
|
||||
KraSocketClient.logger.warning("connection closed. Code: " + code + " reason: " + reason + " remote: " + remote);
|
||||
KraSocketClient.logger.warning(
|
||||
"connection closed. Code: " + code + " reason: " + reason + " remote: " + remote);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -2,7 +2,6 @@ package earth.krakatao.protocol;
|
|||
|
||||
import earth.krakatao.Formatter;
|
||||
import earth.krakatao.KraSocketClient;
|
||||
import earth.krakatao.SocketClient;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
|
@ -11,14 +10,21 @@ import lombok.Getter;
|
|||
|
||||
public class KraSocketClientProtocol {
|
||||
|
||||
@Getter
|
||||
//ArrayList<Integer> cmdIDs = Lists.newArrayList();
|
||||
ArrayList<Integer> cmdIDs = new ArrayList<>();
|
||||
//@Getter
|
||||
//ArrayList<Integer> cmdIDs = new ArrayList<>();
|
||||
|
||||
@Getter
|
||||
HashMap<Integer, Consumer<KraSocketClientProtocolMessage>> consumerHashMap = new HashMap<>();
|
||||
private final ArrayList<Integer> cmdIDs;
|
||||
@Getter
|
||||
private int currentCmdIDIndex;
|
||||
|
||||
private int currentCmdIDIndex = 10;
|
||||
//@Getter
|
||||
//HashMap<Integer, Consumer<KraSocketClientProtocolMessage>> consumerHashMap = new HashMap<>();
|
||||
|
||||
public KraSocketClientProtocol() {
|
||||
this.cmdIDs = new ArrayList<>();
|
||||
this.currentCmdIDIndex = 10;
|
||||
}
|
||||
|
||||
public int generateCmdID() {
|
||||
// TODO: check max int value 2^32
|
||||
|
@ -39,10 +45,11 @@ public class KraSocketClientProtocol {
|
|||
kraProtocolMessage.getDest(), kraProtocolMessage.getUuid(),
|
||||
kraProtocolMessage.getCmdNumber(), kraProtocolMessage.getArgs());
|
||||
}
|
||||
|
||||
|
||||
public byte[] EncodeMessage(int status, int cmdID, int dest, String uuid, int cmdNumber,
|
||||
String args) {
|
||||
KraSocketClient.getLogger().info("sendMessage: " + status + " " + cmdID + " " + dest + " " + cmdNumber);
|
||||
KraSocketClient.getLogger()
|
||||
.info("sendMessage: " + status + " " + cmdID + " " + dest + " " + cmdNumber);
|
||||
|
||||
int argLen = args.length();
|
||||
|
||||
|
@ -74,6 +81,8 @@ public class KraSocketClientProtocol {
|
|||
}
|
||||
}
|
||||
|
||||
this.cmdIDs.add(cmdID);
|
||||
|
||||
return raw;
|
||||
//ProxySystem.getInstance().getSocketClient().SendMessage(raw);
|
||||
}
|
||||
|
@ -114,9 +123,11 @@ public class KraSocketClientProtocol {
|
|||
|
||||
String args = new String(argsBytes, StandardCharsets.UTF_8);
|
||||
|
||||
KraSocketClient.getLogger().info( "decoded message " + status + " " + cmdID + " " + dest + " " + playerUuid + " "
|
||||
+ cmdNumber + " " + args + " ");
|
||||
KraSocketClient.getLogger()
|
||||
.info("decoded message " + status + " " + cmdID + " " + dest + " " + playerUuid + " "
|
||||
+ cmdNumber + " " + args + " ");
|
||||
|
||||
return new KraSocketClientProtocolMessage(status, cmdID, dest, Formatter.stringToUuid(playerUuid).toString(), cmdNumber, args);
|
||||
return new KraSocketClientProtocolMessage(status, cmdID, dest,
|
||||
Formatter.stringToUuid(playerUuid).toString(), cmdNumber, args);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue