diff options
| author | ilotterytea <iltsu@alright.party> | 2025-01-20 23:32:34 +0500 |
|---|---|---|
| committer | ilotterytea <iltsu@alright.party> | 2025-01-20 23:42:02 +0500 |
| commit | 8ecc23455f36da01c373b99a536ecd326b26c01a (patch) | |
| tree | 448977fed53ad8a04cf2c80357032c405b0ca1f8 /core | |
| parent | 8d8eb55d4f3ad98eba837e702ee79187f735f177 (diff) | |
feat: connection between server and game
Diffstat (limited to 'core')
5 files changed, 115 insertions, 1 deletions
diff --git a/core/build.gradle b/core/build.gradle index bb73187..e142af4 100644 --- a/core/build.gradle +++ b/core/build.gradle @@ -4,9 +4,10 @@ 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 project(':shared') - if(enableGraalNative == 'true') { + if (enableGraalNative == 'true') { implementation "io.github.berstanio:gdx-svmhelper-annotations:$graalHelperVersion" } } 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); + } +} |
