ProxySystem/src/main/java/net/krakatoa/proxy/socket/SocketClient.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();
}
}