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