message handling on receiving

master
Alex 2022-01-02 19:55:45 +01:00
parent 83dad1ba08
commit d8b0156bdf
3 changed files with 62 additions and 19 deletions

View File

@ -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);
}
}

View File

@ -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

View File

@ -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);
}
}