summaryrefslogtreecommitdiff
path: root/api
diff options
context:
space:
mode:
authorMike Vink <mike1994vink@gmail.com>2021-07-20 17:41:58 +0200
committerMike Vink <mike1994vink@gmail.com>2021-07-20 17:41:58 +0200
commit5f016158e73a7828c9dec1810e54bbe2550d8c20 (patch)
tree82b380c3976be9e48248ae8f30a5e99b5afc7e97 /api
parent36730af06964e75735ae5d099ee9c5bf2c6b7fc9 (diff)
feat(): trainer registration to actor sys
Diffstat (limited to 'api')
-rw-r--r--api/build.gradle11
-rw-r--r--api/src/main/java/akkamon/api/AkkamonMessageEngine.java6
-rw-r--r--api/src/main/java/akkamon/api/AkkamonSession.java10
-rw-r--r--api/src/main/java/akkamon/api/App.java6
-rw-r--r--api/src/main/java/akkamon/api/EventSocket.java37
-rw-r--r--api/src/main/java/akkamon/api/MessagingEngine.java101
6 files changed, 28 insertions, 143 deletions
diff --git a/api/build.gradle b/api/build.gradle
index 28ec919..188c417 100644
--- a/api/build.gradle
+++ b/api/build.gradle
@@ -4,6 +4,11 @@ plugins {
id 'application'
}
+def versions = [
+ ScalaBinary: "2.13"
+]
+
+
repositories {
jcenter()
mavenCentral()
@@ -11,6 +16,9 @@ repositories {
dependencies {
+ implementation platform("com.typesafe.akka:akka-bom_${versions.ScalaBinary}:2.6.15")
+ implementation "com.typesafe.akka:akka-actor-typed_${versions.ScalaBinary}"
+
// Use the Jersey framework to make writing and testing servlets easier.
implementation 'org.glassfish.jersey.containers:jersey-container-servlet-core:+'
implementation 'org.glassfish.jersey.containers:jersey-container-jetty-http:+'
@@ -31,9 +39,6 @@ dependencies {
implementation 'com.google.code.gson:gson:2.8.7'
- // Reference the domain subproject.
- implementation project(':domain')
-
// Use JUnit Jupiter API for testing.
testImplementation 'org.junit.jupiter:junit-jupiter-api:5.7.0'
// Also use the Mockito mocking framework to mock simple server functionality.
diff --git a/api/src/main/java/akkamon/api/AkkamonMessageEngine.java b/api/src/main/java/akkamon/api/AkkamonMessageEngine.java
new file mode 100644
index 0000000..2bbe0c8
--- /dev/null
+++ b/api/src/main/java/akkamon/api/AkkamonMessageEngine.java
@@ -0,0 +1,6 @@
+package akkamon.api;
+
+public interface AkkamonMessageEngine {
+ // broadcasts position info to WebSocket Clients
+ void broadCastGridPosition();
+}
diff --git a/api/src/main/java/akkamon/api/AkkamonSession.java b/api/src/main/java/akkamon/api/AkkamonSession.java
index 55ca3c3..048071c 100644
--- a/api/src/main/java/akkamon/api/AkkamonSession.java
+++ b/api/src/main/java/akkamon/api/AkkamonSession.java
@@ -1,14 +1,4 @@
package akkamon.api;
-import akkamon.api.models.User;
-
public interface AkkamonSession {
-
- void receiveGameState(String gameState);
-
- void disconnect(int statusCode, String message);
-
- void setCurrentUser(User user);
-
- User getUser();
}
diff --git a/api/src/main/java/akkamon/api/App.java b/api/src/main/java/akkamon/api/App.java
index 989562b..5d9add9 100644
--- a/api/src/main/java/akkamon/api/App.java
+++ b/api/src/main/java/akkamon/api/App.java
@@ -6,15 +6,19 @@ import org.eclipse.jetty.servlet.ServletContextHandler;
import org.eclipse.jetty.servlet.ServletHolder;
import org.eclipse.jetty.websocket.server.JettyWebSocketServlet;
import org.eclipse.jetty.websocket.server.config.JettyWebSocketServletContainerInitializer;
-import org.glassfish.jersey.servlet.ServletContainer;
public class App {
+ public static MessagingEngine messagingEngine;
+
public static void main(String[] args) {
Server server = startServer(8080);
ServletContextHandler context = createStatefulContext(server);
+ messagingEngine = new MessagingEngine();
+
+
// websocket behaviour
// Configure specific websocket behavior
diff --git a/api/src/main/java/akkamon/api/EventSocket.java b/api/src/main/java/akkamon/api/EventSocket.java
index fdefee3..092d763 100644
--- a/api/src/main/java/akkamon/api/EventSocket.java
+++ b/api/src/main/java/akkamon/api/EventSocket.java
@@ -1,18 +1,14 @@
package akkamon.api;
-import java.io.IOException;
-import java.util.concurrent.CountDownLatch;
-
-import akkamon.api.models.User;
-import org.eclipse.jetty.websocket.api.WebSocketAdapter;
import org.eclipse.jetty.websocket.api.Session;
+import org.eclipse.jetty.websocket.api.WebSocketAdapter;
+
+import java.util.concurrent.CountDownLatch;
public class EventSocket extends WebSocketAdapter implements AkkamonSession {
private final CountDownLatch closureLatch = new CountDownLatch(1);
- public User user;
-
@Override
public void onWebSocketConnect(Session sess)
{
@@ -25,7 +21,7 @@ public class EventSocket extends WebSocketAdapter implements AkkamonSession {
{
super.onWebSocketText(message);
System.out.println("Received TEXT message: " + message);
- MessagingEngine.getInstance().incoming(this, message);
+ App.messagingEngine.incoming(this, message);
}
@@ -35,7 +31,6 @@ public class EventSocket extends WebSocketAdapter implements AkkamonSession {
super.onWebSocketClose(statusCode, reason);
System.out.println("Socket Closed: [" + statusCode + "] " + reason);
closureLatch.countDown();
- MessagingEngine.getInstance().sessionOffline(this);
}
@Override
@@ -50,28 +45,4 @@ public class EventSocket extends WebSocketAdapter implements AkkamonSession {
System.out.println("Awaiting closure from remote");
closureLatch.await();
}
-
- @Override
- public void receiveGameState(String gameState) {
- try {
- getRemote().sendString(gameState);
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
-
- @Override
- public void disconnect(int statusCode, String message) {
- getSession().close(statusCode, message);
- }
-
- @Override
- public void setCurrentUser(User user) {
- this.user = user;
- }
-
- @Override
- public User getUser() {
- return user;
- }
}
diff --git a/api/src/main/java/akkamon/api/MessagingEngine.java b/api/src/main/java/akkamon/api/MessagingEngine.java
index 1627ad4..bbab97e 100644
--- a/api/src/main/java/akkamon/api/MessagingEngine.java
+++ b/api/src/main/java/akkamon/api/MessagingEngine.java
@@ -1,120 +1,29 @@
package akkamon.api;
-import akkamon.api.models.*;
-import akkamon.domain.AkkamonImpl;
-import akkamon.domain.Trainer;
+import akkamon.api.models.GameState;
import com.google.gson.Gson;
import java.util.HashMap;
-import java.util.Map;
-import java.util.concurrent.ScheduledThreadPoolExecutor;
-import java.util.concurrent.TimeUnit;
-public class MessagingEngine {
+public class MessagingEngine implements AkkamonMessageEngine {
private HashMap<String, AkkamonSession> akkamonSessions = new HashMap<>();
private static MessagingEngine instance;
private Gson gson = new Gson();
- public static MessagingEngine getInstance() {
- if (instance == null) {
- instance = new MessagingEngine();
- return instance;
- }
- return instance;
- }
-
public MessagingEngine() {
- ScheduledThreadPoolExecutor executor = new ScheduledThreadPoolExecutor(2);
- executor.scheduleAtFixedRate(new Runnable() {
- @Override
- public void run() {
- emitGameState();
- }
- }, 0, 200, TimeUnit.MILLISECONDS);
-
}
- void emitGameState() {
- HashMap<String, Trainer> trainers = AkkamonImpl.getInstance().getDummyTrainersCollection();
-
- if (akkamonSessions.size() == 1) {
- AkkamonSession session = akkamonSessions.get("Ash");
-
- GameState gameState = new GameState();
- // dummy
- gameState.setCurrentPlayer("Ash", trainers);
-
- Event event = new Event("serverSidePosUpdate", gameState);
-
- session.receiveGameState(gson.toJson(event));
-
- } else if (akkamonSessions.size() == 2) {
- for (String name: akkamonSessions.keySet()) {
- AkkamonSession session = akkamonSessions.get(name);
-
- GameState gameState = new GameState();
- // dummy
- gameState.setCurrentPlayer(name, trainers);
- gameState.setRemotePlayers(trainers);
-
- Event event = new Event("serverSidePosUpdate", gameState);
-
- session.receiveGameState(gson.toJson(event));
- }
- }
-
- // for (Map.Entry<User, AkkamonSession> sess: akkamonSessions.entrySet()) {
-
- // User user = sess.getKey();
- // AkkamonSession session = sess.getValue();
-
- // GameState gameState = new GameState();
- // // dummy
- // gameState.setCurrentPlayer(user.name, trainers);
-
- // session.receiveGameState(gson.toJson(gameState));
- // }
+ @Override
+ public void broadCastGridPosition() {
}
void incoming(AkkamonSession session, String message) {
- Event event = gson.fromJson(message, Event.class);
- switch (event.type) {
- case "login":
- login(session, event.user);
- break;
- case "clientSidePosUpdate":
- updatePositions(event.gameState);
- break;
- }
+
}
private void updatePositions(GameState gameState) {
- Player current = gameState.currentPlayer;
- if (gameState.currentPlayer != null) {
- AkkamonImpl.getInstance().updateTrainerPosition(current.name, current.position.x, current.position.y);
- }
- }
- private void login(AkkamonSession session, User user) {
- if (user == null) {
- session.disconnect(401, "Give username and password");
- }
- System.out.println("Currrent connections: " + akkamonSessions.size());
- if (akkamonSessions.size() == 0) {
- akkamonSessions.put("Ash", session);
- System.out.println("After adding ash!: " + akkamonSessions.size());
- session.setCurrentUser(new User("Ash", ""));
- } else if (akkamonSessions.size() == 1) {
- akkamonSessions.put("Misty", session);
- session.setCurrentUser(new User("Misty", ""));
- }
- AkkamonImpl.getInstance().newPlayerConnected(user.name, user.password);
- System.out.println("Emitting gameState!");
- emitGameState();
}
- public void sessionOffline(AkkamonSession session) {
- akkamonSessions.remove(session.getUser().name);
- }
}