diff --git a/pom.xml b/pom.xml
index 41f1013..1bea70c 100644
--- a/pom.xml
+++ b/pom.xml
@@ -68,6 +68,11 @@
org.mongodb
3.12.10
+
+ earth.krakatoa
+ KraSocketClient
+ 1.2-SNAPSHOT
+
@@ -86,5 +91,15 @@
https://oss.sonatype.org/content/repositories/snapshots
+
+ krakatoa-earth
+ https://repo.krakatoa.umbach.dev/repository/krakatoa-earth/
+
+ true
+
+
+ true
+
+
\ No newline at end of file
diff --git a/src/main/java/net/krakatoa/proxy/ProxySystem.java b/src/main/java/net/krakatoa/proxy/ProxySystem.java
index 8d370e5..1baba65 100644
--- a/src/main/java/net/krakatoa/proxy/ProxySystem.java
+++ b/src/main/java/net/krakatoa/proxy/ProxySystem.java
@@ -1,8 +1,11 @@
package net.krakatoa.proxy;
import com.mongodb.async.client.MongoCollection;
-import java.net.URI;
-import java.net.URISyntaxException;
+import earth.krakatao.KraSocketClient;
+import earth.krakatao.KraSocketClientConfig;
+import earth.krakatao.events.KraSocketClientEventInitiater;
+import earth.krakatao.events.KraSocketClientEventInterface;
+import earth.krakatao.protocol.KraSocketClientProtocol;
import java.util.Arrays;
import lombok.Getter;
import lombok.SneakyThrows;
@@ -10,9 +13,8 @@ import net.krakatoa.proxy.command.CodeCommand;
import net.krakatoa.proxy.config.ConfigHandler;
import net.krakatoa.proxy.listener.PlayerDisconnectListener;
import net.krakatoa.proxy.listener.PostLoginListener;
+import net.krakatoa.proxy.listener.SocketClientMessageListener;
import net.krakatoa.proxy.mongo.MongoManager;
-import net.krakatoa.proxy.protocol.KraProtocol;
-import net.krakatoa.proxy.socket.SocketClient;
import net.krakatoa.proxy.util.Formatter;
import net.md_5.bungee.api.plugin.Plugin;
import net.md_5.bungee.api.plugin.PluginManager;
@@ -26,9 +28,11 @@ public class ProxySystem extends Plugin {
private ConfigHandler configHandler;
private MongoManager mongoManager;
- private SocketClient socketClient;
- private KraProtocol kraProtocol;
private Formatter formatter;
+ private KraSocketClientProtocol kraSocketClientProtocol;
+ private KraSocketClient kraSocketClient;
+ private KraSocketClientEventInitiater kraSocketClientEventInitiater;
+ private KraSocketClientEventInterface kraSocketClientEventInterface;
private MongoCollection players;
@@ -37,11 +41,25 @@ public class ProxySystem extends Plugin {
public void onEnable() {
instance = this;
- configHandler = new ConfigHandler();
- configHandler.load();
+ this.configHandler = new ConfigHandler();
+ this.configHandler.load();
- kraProtocol = new KraProtocol();
- formatter = new Formatter();
+ this.formatter = new Formatter();
+
+ this.kraSocketClientProtocol = new KraSocketClientProtocol();
+
+ KraSocketClientConfig kraSocketClientConfig = new KraSocketClientConfig(
+ this.configHandler.getWebSocketProtocol(), this.configHandler.getWebSocketHost(),
+ this.configHandler.getWebSocketPort(), this.configHandler.getWebSocketAccessKey(),
+ "proxy-1");
+
+ this.kraSocketClientEventInitiater = new KraSocketClientEventInitiater();
+ this.kraSocketClientEventInterface = new SocketClientMessageListener();
+
+ this.kraSocketClient = new KraSocketClient(kraSocketClientConfig,
+ this.kraSocketClientEventInterface, this.kraSocketClientProtocol);
+
+ this.kraSocketClient.getSocketClient().connect();
System.out.println(
"mongo cfg " + configHandler.getMongodbHost() + " " + configHandler.getMongodbUsername());
@@ -51,17 +69,6 @@ public class ProxySystem extends Plugin {
configHandler.getMongodbPassword());
mongoManager.connect(configHandler.getMongodbDatabase());
- try {
- socketClient = new SocketClient(
- new URI(configHandler.getWebSocketProtocol() + "://" + configHandler.getWebSocketHost()
- + ":" + configHandler.getWebSocketPort() + "/ws?ak="
- + configHandler.getWebSocketAccessKey() + "&s=proxy-1"));
- } catch (URISyntaxException e) {
- e.printStackTrace();
- }
-
- socketClient.connect();
-
players = mongoManager.getMongoDatabase().getCollection("players");
loadListeners();
@@ -70,8 +77,8 @@ public class ProxySystem extends Plugin {
@Override
public void onDisable() {
- socketClient.getConnection().close();
- socketClient.getConnection().closeConnection(1, "");
+ this.kraSocketClient.getSocketClient().getConnection().close();
+ this.kraSocketClient.getSocketClient().getConnection().closeConnection(1, "");
instance = null;
}
diff --git a/src/main/java/net/krakatoa/proxy/socket/SocketClient.java b/src/main/java/net/krakatoa/proxy/listener/SocketClientMessageListener.java
similarity index 53%
rename from src/main/java/net/krakatoa/proxy/socket/SocketClient.java
rename to src/main/java/net/krakatoa/proxy/listener/SocketClientMessageListener.java
index 26c9625..9053a50 100644
--- a/src/main/java/net/krakatoa/proxy/socket/SocketClient.java
+++ b/src/main/java/net/krakatoa/proxy/listener/SocketClientMessageListener.java
@@ -1,62 +1,35 @@
-package net.krakatoa.proxy.socket;
+package net.krakatoa.proxy.listener;
-import java.net.URI;
-import java.nio.ByteBuffer;
-import java.util.Arrays;
-import java.util.concurrent.TimeUnit;
+import earth.krakatao.events.KraSocketClientEventInterface;
+import earth.krakatao.protocol.KraSocketClientProtocolMessage;
import net.krakatoa.proxy.ProxySystem;
-import net.krakatoa.proxy.protocol.KraProtocolMessage;
import net.md_5.bungee.api.ProxyServer;
import net.md_5.bungee.api.chat.TextComponent;
import net.md_5.bungee.api.connection.ProxiedPlayer;
-import org.java_websocket.client.WebSocketClient;
import org.java_websocket.handshake.ServerHandshake;
-public class SocketClient extends WebSocketClient {
-
- public SocketClient(URI uri) {
- super(uri);
- }
-
- public void SendMessage(byte[] message) {
- if (isOpen()) {
- send(message);
- }
- }
+public class SocketClientMessageListener implements KraSocketClientEventInterface {
@Override
public void onOpen(ServerHandshake serverHandshake) {
- System.out.println("Socket connection opened!");
-
- //ProxySystem.getInstance().getKraProtocol()
- // .SendMessage(1, 126375, 248, "myuui123asdrsdasadsdasdadsadsdsa", 65017, "player joined");
-
for (ProxiedPlayer proxiedPlayer : ProxyServer.getInstance().getPlayers()) {
proxiedPlayer.sendMessage(new TextComponent("§cSocket §8» §aConnected"));
}
}
@Override
- public void onMessage(String s) {
- System.out.println("recv s: " + s);
- }
-
- @Override
- public void onMessage(ByteBuffer byteBuffer) {
- System.out.println("recv b: " + Arrays.toString(byteBuffer.array()));
-
- KraProtocolMessage kraProtocolMessage = ProxySystem.getInstance().getKraProtocol()
- .DecodeMessage(byteBuffer.array());
+ public void onMessage(KraSocketClientProtocolMessage kraProtocolMessage) {
System.out.println(
"kraProtocolMessage " + kraProtocolMessage.getCmdID() + " " + kraProtocolMessage.getArgs());
// remove cmdID from cmdID list
- ProxySystem.getInstance().getKraProtocol().getCmdIDs()
+ ProxySystem.getInstance().getKraSocketClientProtocol().getCmdIDs()
.removeIf(cmdID -> cmdID == kraProtocolMessage.getCmdID());
System.out.println(
- "consumer ids " + ProxySystem.getInstance().getKraProtocol().getConsumerHashMap().keySet());
+ "consumer ids " + ProxySystem.getInstance().getKraSocketClientProtocol()
+ .getConsumerHashMap().keySet());
// test - mobile or voice socket connected
if (kraProtocolMessage.getCmdNumber() == 15) {
@@ -79,7 +52,7 @@ public class SocketClient extends WebSocketClient {
});
}
- ProxySystem.getInstance().getKraProtocol().getConsumerHashMap()
+ ProxySystem.getInstance().getKraSocketClientProtocol().getConsumerHashMap()
.forEach((cmdID, consumer) -> {
if (cmdID == kraProtocolMessage.getCmdID()) {
System.out.println("accept " + cmdID + " " + kraProtocolMessage.getCmdID());
@@ -90,32 +63,10 @@ public class SocketClient extends WebSocketClient {
@Override
public void onClose(int code, String reason, boolean remote) {
- System.out.println(
- "Connection! closed by " + (remote ? "remote peer" : "us") + " Code: " + code + " Reason: "
- + reason);
-
for (ProxiedPlayer proxiedPlayer : ProxyServer.getInstance().getPlayers()) {
proxiedPlayer.sendMessage(
new TextComponent(
"§cSocket §8» §c" + (remote ? "Connection! Closed by remote peer" : reason)));
}
-
- /* 1 called on plugin disable */
- if (code != 1) {
- ProxyServer.getInstance().getScheduler().schedule(ProxySystem.getInstance(), () -> {
- for (ProxiedPlayer proxiedPlayer : ProxyServer.getInstance().getPlayers()) {
- proxiedPlayer.sendMessage(new TextComponent("§cSocket §8» §7Reconnecting..."));
- }
-
- System.out.println("try reconnect");
- reconnect();
- }, 3L, TimeUnit.SECONDS);
- }
- }
-
- @Override
- public void onError(Exception e) {
- System.out.println("Error: " + e);
- //e.printStackTrace();
}
}
diff --git a/src/main/java/net/krakatoa/proxy/protocol/KraProtocol.java b/src/main/java/net/krakatoa/proxy/protocol/KraProtocol.java
deleted file mode 100644
index b54844d..0000000
--- a/src/main/java/net/krakatoa/proxy/protocol/KraProtocol.java
+++ /dev/null
@@ -1,119 +0,0 @@
-package net.krakatoa.proxy.protocol;
-
-import com.google.common.collect.Lists;
-import java.nio.charset.StandardCharsets;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.function.Consumer;
-import lombok.Getter;
-import net.krakatoa.proxy.ProxySystem;
-
-public class KraProtocol {
-
- @Getter
- ArrayList cmdIDs = Lists.newArrayList();
-
- @Getter
- HashMap> consumerHashMap = new HashMap<>();
-
- public int getCmdID() {
- if (cmdIDs.isEmpty()) {
- cmdIDs.add(10);
- return 10;
- }
-
- int cmdID = cmdIDs.get(cmdIDs.size() - 1) + 1;
-
- cmdIDs.add(cmdID);
-
- // TODO: check max int value 2^32
-
- return cmdID;
- }
-
- public void SendMessage(KraProtocolMessage kraProtocolMessage) {
- SendMessage(kraProtocolMessage.getStatus(), kraProtocolMessage.getCmdID(),
- kraProtocolMessage.getDest(), kraProtocolMessage.getUuid(),
- kraProtocolMessage.getCmdNumber(), kraProtocolMessage.getArgs());
- }
-
- public void SendMessage(int status, int cmdID, int dest, String uuid, int cmdNumber,
- String args) {
- System.out.println("sendMessage: " + status + " " + cmdID + " " + dest + " " + cmdNumber);
-
- int argLen = args.length();
-
- byte[] raw = new byte[40 + argLen];
-
- raw[0] = (byte) status;
-
- raw[1] = (byte) cmdID;
- raw[2] = (byte) (cmdID >> 8);
- raw[3] = (byte) (cmdID >> 16);
- raw[4] = (byte) (cmdID >> 24);
-
- raw[5] = (byte) dest;
-
- byte[] uuidBytes = uuid.getBytes();
-
- /* for (int i = 0; i < 32; i++) {
- raw[6 + i] = uuidBytes[i];
- }*/
-
- System.arraycopy(uuidBytes, 0, raw, 6, 32);
-
- raw[38] = (byte) cmdNumber;
- raw[39] = (byte) (cmdNumber >> 8);
-
- if (argLen > 0) {
- for (int i = 0; i < argLen; i++) {
- raw[40 + i] = (byte) args.charAt(i);
- }
- }
-
- ProxySystem.getInstance().getSocketClient().SendMessage(raw);
- }
-
- public KraProtocolMessage DecodeMessage(byte[] data) {
- System.out.println("start decode");
-
- byte status = data[0];
-
- int cmdID = Byte.toUnsignedInt(data[1]);
-
- cmdID += Byte.toUnsignedInt(data[2]) * 256;
- cmdID += Byte.toUnsignedInt(data[3]) * 256 * 256;
- cmdID += Byte.toUnsignedInt(data[4]) * 256 * 256 * 256;
-
- int dest = Byte.toUnsignedInt(data[5]);
-
- byte[] playerUuidBytes = new byte[32];
-
- System.arraycopy(data, 6, playerUuidBytes, 0, 32);
-
- /* for (int i = 0; i < 32; i++) {
- playerUuidBytes[i] = data[6 + i];
- } */
-
- String playerUuid = new String(playerUuidBytes, StandardCharsets.UTF_8);
-
- short cmdNumber = (short) (Byte.toUnsignedInt(data[38]) + (Byte.toUnsignedInt(data[39]) * 256));
-
- int argLen = data.length - 40;
- byte[] argsBytes = new byte[argLen];
-
- /* for (int i = 0; i < argLen; i++) {
- argsBytes[i] = data[40 + i];
- } */
-
- System.arraycopy(data, 40, argsBytes, 0, argLen);
-
- String args = new String(argsBytes, StandardCharsets.UTF_8);
-
- System.out.println(
- "decoded message " + status + " " + cmdID + " " + dest + " " + playerUuid + " "
- + cmdNumber + " " + args + " ");
-
- return new KraProtocolMessage(status, cmdID, dest, playerUuid, cmdNumber, args);
- }
-}
diff --git a/src/main/java/net/krakatoa/proxy/protocol/KraProtocolMessage.java b/src/main/java/net/krakatoa/proxy/protocol/KraProtocolMessage.java
deleted file mode 100644
index 7a46101..0000000
--- a/src/main/java/net/krakatoa/proxy/protocol/KraProtocolMessage.java
+++ /dev/null
@@ -1,24 +0,0 @@
-package net.krakatoa.proxy.protocol;
-
-import lombok.AllArgsConstructor;
-import lombok.Getter;
-
-@AllArgsConstructor
-@Getter
-public class KraProtocolMessage {
-
- private final byte status;
- private final int cmdID; // long
- private final int dest;
- private final String uuid;
- private final short cmdNumber;
- private final String args;
-
- public int getStatus() {
- return Byte.toUnsignedInt(status);
- }
-
- public int getCmdNumber() {
- return Short.toUnsignedInt(cmdNumber);
- }
-}
diff --git a/src/main/java/net/krakatoa/proxy/protocol/KraProtocolMessageHandler.java b/src/main/java/net/krakatoa/proxy/protocol/KraProtocolMessageHandler.java
deleted file mode 100644
index ad1a724..0000000
--- a/src/main/java/net/krakatoa/proxy/protocol/KraProtocolMessageHandler.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package net.krakatoa.proxy.protocol;
-
-public class KraProtocolMessageHandler {
-
-}
diff --git a/src/main/java/net/krakatoa/proxy/protocol/KraProtocolStatus.java b/src/main/java/net/krakatoa/proxy/protocol/KraProtocolStatus.java
deleted file mode 100644
index b7c928d..0000000
--- a/src/main/java/net/krakatoa/proxy/protocol/KraProtocolStatus.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package net.krakatoa.proxy.protocol;
-
-import lombok.Getter;
-
-public enum KraProtocolStatus {
-
- SEND(10),
- GET(11),
- MESSAGE_ALREADY_IN_QUEUE(12),
- ERROR_NO_PERMS(13),
- ERROR_TRY_AGAIN(14),
- ERROR_ARG_LEN_TOO_BIG(15),
- REPLY(16);
-
- @Getter
- private final int status;
-
- KraProtocolStatus(int status) {
- this.status = status;
- }
-}