summaryrefslogtreecommitdiff
path: root/core/src
diff options
context:
space:
mode:
authorilotterytea <iltsu@alright.party>2025-01-20 23:32:34 +0500
committerilotterytea <iltsu@alright.party>2025-01-20 23:42:02 +0500
commit8ecc23455f36da01c373b99a536ecd326b26c01a (patch)
tree448977fed53ad8a04cf2c80357032c405b0ca1f8 /core/src
parent8d8eb55d4f3ad98eba837e702ee79187f735f177 (diff)
feat: connection between server and game
Diffstat (limited to 'core/src')
-rw-r--r--core/src/main/java/kz/ilotterytea/frogartha/FrogarthaConstants.java7
-rw-r--r--core/src/main/java/kz/ilotterytea/frogartha/FrogarthaGame.java10
-rw-r--r--core/src/main/java/kz/ilotterytea/frogartha/sessions/SessionClient.java81
-rw-r--r--core/src/main/java/kz/ilotterytea/frogartha/sessions/SessionHandlers.java15
4 files changed, 113 insertions, 0 deletions
diff --git a/core/src/main/java/kz/ilotterytea/frogartha/FrogarthaConstants.java b/core/src/main/java/kz/ilotterytea/frogartha/FrogarthaConstants.java
new file mode 100644
index 0000000..f80948a
--- /dev/null
+++ b/core/src/main/java/kz/ilotterytea/frogartha/FrogarthaConstants.java
@@ -0,0 +1,7 @@
+package kz.ilotterytea.frogartha;
+
+public class FrogarthaConstants {
+ public static class URLS {
+ public static String SESSION_WSS = "ws://localhost:20015";
+ }
+}
diff --git a/core/src/main/java/kz/ilotterytea/frogartha/FrogarthaGame.java b/core/src/main/java/kz/ilotterytea/frogartha/FrogarthaGame.java
index 149dcc7..ea227ec 100644
--- a/core/src/main/java/kz/ilotterytea/frogartha/FrogarthaGame.java
+++ b/core/src/main/java/kz/ilotterytea/frogartha/FrogarthaGame.java
@@ -2,6 +2,7 @@ package kz.ilotterytea.frogartha;
import com.badlogic.gdx.Game;
import kz.ilotterytea.frogartha.screens.GameScreen;
+import kz.ilotterytea.frogartha.sessions.SessionClient;
/**
* {@link com.badlogic.gdx.ApplicationListener} implementation shared by all platforms.
@@ -9,8 +10,13 @@ import kz.ilotterytea.frogartha.screens.GameScreen;
public class FrogarthaGame extends Game {
private static FrogarthaGame instance;
+ private SessionClient sessionClient;
+
@Override
public void create() {
+ sessionClient = new SessionClient();
+ sessionClient.connect();
+
setScreen(new GameScreen());
}
@@ -18,4 +24,8 @@ public class FrogarthaGame extends Game {
if (instance == null) instance = new FrogarthaGame();
return instance;
}
+
+ public SessionClient getSessionClient() {
+ return sessionClient;
+ }
}
diff --git a/core/src/main/java/kz/ilotterytea/frogartha/sessions/SessionClient.java b/core/src/main/java/kz/ilotterytea/frogartha/sessions/SessionClient.java
new file mode 100644
index 0000000..c775fdf
--- /dev/null
+++ b/core/src/main/java/kz/ilotterytea/frogartha/sessions/SessionClient.java
@@ -0,0 +1,81 @@
+package kz.ilotterytea.frogartha.sessions;
+
+import kz.ilotterytea.frogartha.FrogarthaConstants;
+import kz.ilotterytea.frogartha.FrogarthaGame;
+import kz.ilotterytea.frogartha.domain.Acknowledge;
+import kz.ilotterytea.frogartha.domain.Identity;
+import kz.ilotterytea.frogartha.exceptions.PlayerKickException;
+import org.java_websocket.client.WebSocketClient;
+import org.java_websocket.handshake.ServerHandshake;
+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 {
+ private final Logger log;
+ private final FrogarthaGame game;
+
+ public SessionClient() {
+ super(URI.create(FrogarthaConstants.URLS.SESSION_WSS));
+ this.log = LoggerFactory.getLogger(SessionClient.class);
+ this.game = FrogarthaGame.getInstance();
+ }
+
+ @Override
+ public void onOpen(ServerHandshake handshakedata) {
+ log.info("Connected");
+ updateIdentity();
+ }
+
+ @Override
+ public void onMessage(String message) {
+ }
+
+ @Override
+ public void onMessage(ByteBuffer bytes) {
+ try {
+ // Deserialize the object
+ ByteArrayInputStream bais = new ByteArrayInputStream(bytes.array());
+ ObjectInputStream ois = new ObjectInputStream(bais);
+ Object obj = ois.readObject();
+
+ if (obj instanceof Acknowledge) SessionHandlers.handleAcknowledge((Acknowledge) obj);
+ else if (obj instanceof PlayerKickException) throw (PlayerKickException) obj;
+ } catch (PlayerKickException e) {
+ log.info("Kicked out: {}", e.getMessage());
+ } catch (Exception e) {
+ log.error("An exception was thrown while processing message", e);
+ }
+ }
+
+ @Override
+ public void onClose(int code, String reason, boolean remote) {
+ log.info("Connection closed! Reason: {} {}", code, reason);
+ }
+
+ @Override
+ public void onError(Exception ex) {
+ log.error("Failed to connect", ex);
+ }
+
+ public void send(Object object) {
+ try {
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ ObjectOutputStream oos = new ObjectOutputStream(baos);
+ oos.writeObject(object);
+ send(baos.toByteArray());
+ } catch (Exception e) {
+ log.error("Failed to serialize and send an object", e);
+ }
+ }
+
+ public void updateIdentity() {
+ send(new Identity("Playerxd"));
+ }
+}
diff --git a/core/src/main/java/kz/ilotterytea/frogartha/sessions/SessionHandlers.java b/core/src/main/java/kz/ilotterytea/frogartha/sessions/SessionHandlers.java
new file mode 100644
index 0000000..8c7487b
--- /dev/null
+++ b/core/src/main/java/kz/ilotterytea/frogartha/sessions/SessionHandlers.java
@@ -0,0 +1,15 @@
+package kz.ilotterytea.frogartha.sessions;
+
+import kz.ilotterytea.frogartha.FrogarthaGame;
+import kz.ilotterytea.frogartha.domain.Acknowledge;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class SessionHandlers {
+ private static final Logger log = LoggerFactory.getLogger(SessionHandlers.class);
+ private static final SessionClient client = FrogarthaGame.getInstance().getSessionClient();
+
+ public static void handleAcknowledge(Acknowledge acknowledge) {
+ log.info("The server was acknowledged: {}", acknowledge);
+ }
+}