diff options
| author | ilotterytea <iltsu@alright.party> | 2025-01-21 03:17:15 +0500 |
|---|---|---|
| committer | ilotterytea <iltsu@alright.party> | 2025-01-21 03:17:15 +0500 |
| commit | 1ecd8d1d527b6b66b4746e44023b6ab3cb2ca4cc (patch) | |
| tree | 44a766670059ef3beb1da048844fc7693418bcf8 /core/src | |
| parent | 4e524d08c5b427cabc1a6e452347c09c963eb86c (diff) | |
feat: using other serializer and gdx-websocket (because the old one doesn't support gwt)
Diffstat (limited to 'core/src')
| -rw-r--r-- | core/src/main/java/kz/ilotterytea/frogartha/sessions/SessionClient.java | 75 | ||||
| -rw-r--r-- | core/src/main/java/kz/ilotterytea/frogartha/sessions/SessionHandlers.java | 3 |
2 files changed, 46 insertions, 32 deletions
diff --git a/core/src/main/java/kz/ilotterytea/frogartha/sessions/SessionClient.java b/core/src/main/java/kz/ilotterytea/frogartha/sessions/SessionClient.java index 555c287..67afd69 100644 --- a/core/src/main/java/kz/ilotterytea/frogartha/sessions/SessionClient.java +++ b/core/src/main/java/kz/ilotterytea/frogartha/sessions/SessionClient.java @@ -1,49 +1,63 @@ package kz.ilotterytea.frogartha.sessions; +import com.github.czyzby.websocket.WebSocket; +import com.github.czyzby.websocket.WebSocketListener; +import com.github.czyzby.websocket.WebSockets; +import com.github.czyzby.websocket.serialization.impl.ManualSerializer; import kz.ilotterytea.frogartha.FrogarthaConstants; import kz.ilotterytea.frogartha.FrogarthaGame; import kz.ilotterytea.frogartha.domain.Identity; import kz.ilotterytea.frogartha.domain.server.Acknowledge; import kz.ilotterytea.frogartha.exceptions.PlayerKickException; -import org.java_websocket.client.WebSocketClient; -import org.java_websocket.handshake.ServerHandshake; +import kz.ilotterytea.frogartha.utils.SerializerUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; -import java.io.ObjectInputStream; -import java.io.ObjectOutputStream; -import java.net.URI; -import java.nio.ByteBuffer; - -public class SessionClient extends WebSocketClient { +public class SessionClient implements WebSocketListener { private final Logger log; private final FrogarthaGame game; + private final WebSocket connection; + private final ManualSerializer serializer; public SessionClient() { - super(URI.create(FrogarthaConstants.URLS.SESSION_WSS)); + this.connection = WebSockets.newSocket(FrogarthaConstants.URLS.SESSION_WSS); + this.connection.addListener(this); + + this.serializer = new ManualSerializer(); + SerializerUtils.registerTypes(serializer); + connection.setSerializer(serializer); + this.log = LoggerFactory.getLogger(SessionClient.class); this.game = FrogarthaGame.getInstance(); } @Override - public void onOpen(ServerHandshake handshakedata) { + public boolean onOpen(WebSocket webSocket) { log.info("Connected"); updateIdentity(); + return true; + } + + @Override + public boolean onClose(WebSocket webSocket, int closeCode, String reason) { + log.info("Connection closed! Reason: {} {}", closeCode, reason); + game.getIdentityClient().setAuthorized(false); + return true; } @Override - public void onMessage(String message) { + public boolean onMessage(WebSocket webSocket, String packet) { + return false; } @Override - public void onMessage(ByteBuffer bytes) { + public boolean onMessage(WebSocket webSocket, byte[] packet) { try { - // Deserialize the object - ByteArrayInputStream bais = new ByteArrayInputStream(bytes.array()); - ObjectInputStream ois = new ObjectInputStream(bais); - Object obj = ois.readObject(); + Object obj = serializer.deserialize(packet); + + if (obj == null) { + throw new RuntimeException("Deserialized packet is null"); + } if (obj instanceof Acknowledge) SessionHandlers.handleAcknowledge((Acknowledge) obj); else if (obj instanceof PlayerKickException) throw (PlayerKickException) obj; @@ -52,30 +66,31 @@ public class SessionClient extends WebSocketClient { } catch (Exception e) { log.error("An exception was thrown while processing message", e); } + return true; } @Override - public void onClose(int code, String reason, boolean remote) { - log.info("Connection closed! Reason: {} {}", code, reason); - game.getIdentityClient().setAuthorized(false); - } - - @Override - public void onError(Exception ex) { - log.error("Failed to connect", ex); + public boolean onError(WebSocket webSocket, Throwable error) { + log.error("An exception was thrown on session connection", error); + return true; } public void send(Object object) { try { - ByteArrayOutputStream baos = new ByteArrayOutputStream(); - ObjectOutputStream oos = new ObjectOutputStream(baos); - oos.writeObject(object); - send(baos.toByteArray()); + connection.send(serializer.serialize(object)); } catch (Exception e) { log.error("Failed to serialize and send an object", e); } } + public void connect() { + connection.connect(); + } + + public void close() { + connection.close(); + } + public void updateIdentity() { send(new Identity(game.getIdentityClient().getUsername())); } diff --git a/core/src/main/java/kz/ilotterytea/frogartha/sessions/SessionHandlers.java b/core/src/main/java/kz/ilotterytea/frogartha/sessions/SessionHandlers.java index 0a298dc..cb6457d 100644 --- a/core/src/main/java/kz/ilotterytea/frogartha/sessions/SessionHandlers.java +++ b/core/src/main/java/kz/ilotterytea/frogartha/sessions/SessionHandlers.java @@ -1,7 +1,6 @@ package kz.ilotterytea.frogartha.sessions; import kz.ilotterytea.frogartha.FrogarthaGame; -import kz.ilotterytea.frogartha.domain.Identity; import kz.ilotterytea.frogartha.domain.server.Acknowledge; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -14,7 +13,7 @@ public class SessionHandlers { public static void handleAcknowledge(Acknowledge acknowledge) { log.info("The server was acknowledged: {}", acknowledge); - if (acknowledge.getPayload() instanceof Identity) { + if (acknowledge.getCode() == Acknowledge.AcknowledgeCode.IDENTIFIED) { game.getIdentityClient().setAuthorized(true); } } |
