122 lines
4.1 KiB
Java
122 lines
4.1 KiB
Java
package net.krakatoa.proxy.socket;
|
|
|
|
import java.net.URI;
|
|
import java.nio.ByteBuffer;
|
|
import java.util.Arrays;
|
|
import java.util.concurrent.TimeUnit;
|
|
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);
|
|
}
|
|
}
|
|
|
|
@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());
|
|
|
|
System.out.println(
|
|
"kraProtocolMessage " + kraProtocolMessage.getCmdID() + " " + kraProtocolMessage.getArgs());
|
|
|
|
// remove cmdID from cmdID list
|
|
ProxySystem.getInstance().getKraProtocol().getCmdIDs()
|
|
.removeIf(cmdID -> cmdID == kraProtocolMessage.getCmdID());
|
|
|
|
System.out.println(
|
|
"consumer ids " + ProxySystem.getInstance().getKraProtocol().getConsumerHashMap().keySet());
|
|
|
|
// test - mobile or voice socket connected
|
|
if (kraProtocolMessage.getCmdNumber() == 15) {
|
|
ProxyServer.getInstance().getScheduler().runAsync(ProxySystem.getInstance(), () -> {
|
|
System.out.println(ProxySystem.getInstance().getFormatter()
|
|
.stringToUuid(kraProtocolMessage.getUuid()));
|
|
|
|
ProxiedPlayer proxiedPlayer = ProxySystem.getInstance().getProxy()
|
|
.getPlayer(ProxySystem.getInstance().getFormatter()
|
|
.stringToUuid(kraProtocolMessage.getUuid()));
|
|
|
|
if (proxiedPlayer != null) {
|
|
if (kraProtocolMessage.getArgs().equals("1")) {
|
|
proxiedPlayer.sendMessage(new TextComponent("§5Mobile §8» §cConnection lost!"));
|
|
} else {
|
|
proxiedPlayer.sendMessage(
|
|
new TextComponent("§bVoice §8» §cConnection lost!"));
|
|
}
|
|
}
|
|
});
|
|
}
|
|
|
|
ProxySystem.getInstance().getKraProtocol().getConsumerHashMap()
|
|
.forEach((cmdID, consumer) -> {
|
|
if (cmdID == kraProtocolMessage.getCmdID()) {
|
|
System.out.println("accept " + cmdID + " " + kraProtocolMessage.getCmdID());
|
|
consumer.accept(kraProtocolMessage);
|
|
}
|
|
});
|
|
}
|
|
|
|
@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();
|
|
}
|
|
}
|