package earth.krakatao; import earth.krakatao.protocol.KraSocketClientProtocol; import earth.krakatao.protocol.KraSocketClientProtocolMessage; import earth.krakatao.events.KraSocketClientEventInitiater; import java.net.URI; import java.nio.ByteBuffer; import org.java_websocket.client.WebSocketClient; import org.java_websocket.handshake.ServerHandshake; public class SocketClient extends WebSocketClient { private final KraSocketClientProtocol kraProtocol; private final KraSocketClientEventInitiater kraSocketClientEventInitiater; public SocketClient(URI serverUri, KraSocketClientEventInitiater kraSocketClientEventInitiater, KraSocketClientProtocol kraProtocol) { super(serverUri); this.kraSocketClientEventInitiater = kraSocketClientEventInitiater; this.kraProtocol = kraProtocol; } public void SendMessage(KraSocketClientProtocolMessage kraProtocolMessage) { if (isOpen()) { send(this.kraProtocol.EncodeMessage(kraProtocolMessage)); } } public void Reconnect() { KraSocketClient.getLogger().info("Reconnect..."); reconnect(); } @Override public void onOpen(ServerHandshake serverHandshake) { this.kraSocketClientEventInitiater.callOnOpen(serverHandshake); KraSocketClient.getLogger().info("connection open"); } @Override public void onMessage(String s) { } @Override public void onMessage(ByteBuffer byteBuffer) { KraSocketClientProtocolMessage kraProtocolMessage = new KraSocketClientProtocol().DecodeMessage(byteBuffer.array()); this.kraSocketClientEventInitiater.callOnMessage(kraProtocolMessage); KraSocketClient.getLogger().info("rec msg " + kraProtocolMessage); } @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); } @Override public void onError(Exception e) { KraSocketClient.getLogger().warning("Err: " + e); } }