summaryrefslogtreecommitdiff
path: root/core
diff options
context:
space:
mode:
Diffstat (limited to 'core')
-rw-r--r--core/build.gradle3
-rw-r--r--core/src/main/java/kz/ilotterytea/frogartha/sessions/SessionClient.java75
-rw-r--r--core/src/main/java/kz/ilotterytea/frogartha/sessions/SessionHandlers.java3
3 files changed, 47 insertions, 34 deletions
diff --git a/core/build.gradle b/core/build.gradle
index eac5714..a731b5d 100644
--- a/core/build.gradle
+++ b/core/build.gradle
@@ -2,9 +2,8 @@
eclipse.project.name = appName + '-core'
dependencies {
- api "com.badlogicgames.gdx:gdx:$gdxVersion"
api "com.github.mgsx-dev.gdx-gltf:gltf:$gdxGltfVersion"
- api "org.java-websocket:Java-WebSocket:$javaWebsocketVersion"
+ api "com.github.MrStahlfelge.gdx-websockets:core:$gdxWsVersion"
api "ch.qos.logback:logback-classic:$logbackVersion"
api project(':shared')
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);
}
}