summaryrefslogtreecommitdiff
path: root/api/src
diff options
context:
space:
mode:
authorMike Vink <mike1994vink@gmail.com>2021-07-20 20:55:26 +0200
committerMike Vink <mike1994vink@gmail.com>2021-07-20 20:55:26 +0200
commitb5ec13318a8b6a5f825eb726d6465873495a49ab (patch)
tree8fd086ceaa31d0b18cab6aa3e88f2668bf922788 /api/src
parent5f016158e73a7828c9dec1810e54bbe2550d8c20 (diff)
feat(): figuring out movePlayerMessage
Diffstat (limited to 'api/src')
-rw-r--r--api/src/main/java/akkamon/api/AkkamonMessageEngine.java6
-rw-r--r--api/src/main/java/akkamon/api/AkkamonSession.java4
-rw-r--r--api/src/main/java/akkamon/api/EventSocket.java11
-rw-r--r--api/src/main/java/akkamon/api/MessagingEngine.java64
-rw-r--r--api/src/main/java/akkamon/api/models/Event.java10
-rw-r--r--api/src/main/java/akkamon/api/models/EventType.java11
-rw-r--r--api/src/main/java/akkamon/api/models/GameState.java33
-rw-r--r--api/src/main/java/akkamon/api/models/HeartBeatEvent.java5
-rw-r--r--api/src/main/java/akkamon/api/models/Player.java13
-rw-r--r--api/src/main/java/akkamon/api/models/Position.java11
-rw-r--r--api/src/main/java/akkamon/api/models/User.java11
11 files changed, 88 insertions, 91 deletions
diff --git a/api/src/main/java/akkamon/api/AkkamonMessageEngine.java b/api/src/main/java/akkamon/api/AkkamonMessageEngine.java
deleted file mode 100644
index 2bbe0c8..0000000
--- a/api/src/main/java/akkamon/api/AkkamonMessageEngine.java
+++ /dev/null
@@ -1,6 +0,0 @@
-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
deleted file mode 100644
index 048071c..0000000
--- a/api/src/main/java/akkamon/api/AkkamonSession.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package akkamon.api;
-
-public interface AkkamonSession {
-}
diff --git a/api/src/main/java/akkamon/api/EventSocket.java b/api/src/main/java/akkamon/api/EventSocket.java
index 092d763..7b9619a 100644
--- a/api/src/main/java/akkamon/api/EventSocket.java
+++ b/api/src/main/java/akkamon/api/EventSocket.java
@@ -1,8 +1,10 @@
package akkamon.api;
+import akkamon.domain.AkkamonSession;
import org.eclipse.jetty.websocket.api.Session;
import org.eclipse.jetty.websocket.api.WebSocketAdapter;
+import java.io.IOException;
import java.util.concurrent.CountDownLatch;
@@ -45,4 +47,13 @@ public class EventSocket extends WebSocketAdapter implements AkkamonSession {
System.out.println("Awaiting closure from remote");
closureLatch.await();
}
+
+ @Override
+ public void send(String event) {
+ try {
+ getRemote().sendString(event);
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
}
diff --git a/api/src/main/java/akkamon/api/MessagingEngine.java b/api/src/main/java/akkamon/api/MessagingEngine.java
index bbab97e..4919b32 100644
--- a/api/src/main/java/akkamon/api/MessagingEngine.java
+++ b/api/src/main/java/akkamon/api/MessagingEngine.java
@@ -1,28 +1,84 @@
package akkamon.api;
-import akkamon.api.models.GameState;
+import akka.actor.typed.ActorRef;
+import akka.actor.typed.ActorSystem;
+import akkamon.api.models.Event;
+import akkamon.api.models.HeartBeatEvent;
+import akkamon.domain.AkkamonMessageEngine;
+import akkamon.domain.AkkamonNexus;
+import akkamon.domain.AkkamonSession;
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 implements AkkamonMessageEngine {
- private HashMap<String, AkkamonSession> akkamonSessions = new HashMap<>();
- private static MessagingEngine instance;
+ private Map<String, AkkamonSession> trainerIdToAkkamonSessions = new HashMap<>();
private Gson gson = new Gson();
+ private ActorRef<AkkamonNexus.Command> system;
+
public MessagingEngine() {
+ this.system = ActorSystem.create(AkkamonNexus.create(this), "akkamon-system");
+
+ ScheduledThreadPoolExecutor executor = new ScheduledThreadPoolExecutor(2);
+ executor.scheduleAtFixedRate(new Runnable() {
+ @Override
+ public void run() {
+ heartBeat();
+ }
+ }, 0, 200, TimeUnit.MILLISECONDS);
+
+ }
+
+ private void heartBeat() {
+ if (!trainerIdToAkkamonSessions.isEmpty()) {
+ for (Map.Entry<String, AkkamonSession> entry : trainerIdToAkkamonSessions.entrySet()) {
+ // System.out.println("heartbeat to " + entry.getKey());
+ entry.getValue().send(gson.toJson(new HeartBeatEvent()));
+ }
+ }
}
@Override
public void broadCastGridPosition() {
}
+ @Override
+ public void registerTrainerSession(String trainerId, AkkamonSession session) {
+ trainerIdToAkkamonSessions.put(trainerId, session);
+ }
+
+ @Override
+ public void removeTrainerSession(String trainerId, AkkamonSession session) {
+
+ }
+
void incoming(AkkamonSession session, String message) {
+ Event event = gson.fromJson(message, Event.class);
+ switch (event.type) {
+ case TRAINER_REGISTRATION:
+ String trainerId = String.valueOf(trainerIdToAkkamonSessions.size());
+ String sceneId = "AkkamonStartScene";
+
+ system.tell(new AkkamonNexus.RequestTrainerRegistration(
+ trainerId,
+ sceneId,
+ session,
+ system
+ ));
+ break;
+ case HEART_BEAT:
+ System.out.println("My heart goes boom skip!");
+ break;
+ }
}
- private void updatePositions(GameState gameState) {
+ private void updatePositions() {
}
diff --git a/api/src/main/java/akkamon/api/models/Event.java b/api/src/main/java/akkamon/api/models/Event.java
index 50fc849..8517b06 100644
--- a/api/src/main/java/akkamon/api/models/Event.java
+++ b/api/src/main/java/akkamon/api/models/Event.java
@@ -1,14 +1,6 @@
package akkamon.api.models;
-import org.eclipse.jetty.server.Authentication;
-
public class Event {
- public String type;
- public GameState gameState;
- public User user;
+ public EventType type;
- public Event(String type, GameState gameState) {
- this.type = type;
- this.gameState = gameState;
- }
}
diff --git a/api/src/main/java/akkamon/api/models/EventType.java b/api/src/main/java/akkamon/api/models/EventType.java
new file mode 100644
index 0000000..1ca2ef2
--- /dev/null
+++ b/api/src/main/java/akkamon/api/models/EventType.java
@@ -0,0 +1,11 @@
+package akkamon.api.models;
+
+import com.google.gson.annotations.SerializedName;
+
+public enum EventType {
+ @SerializedName("PlayerRegistrationEvent")
+ TRAINER_REGISTRATION,
+
+ @SerializedName("HeartBeat")
+ HEART_BEAT
+}
diff --git a/api/src/main/java/akkamon/api/models/GameState.java b/api/src/main/java/akkamon/api/models/GameState.java
deleted file mode 100644
index d849fe5..0000000
--- a/api/src/main/java/akkamon/api/models/GameState.java
+++ /dev/null
@@ -1,33 +0,0 @@
-package akkamon.api.models;
-
-import akkamon.domain.Trainer;
-
-import java.util.HashMap;
-import java.util.Map;
-
-public class GameState {
- public Player currentPlayer;
- public HashMap<String, Player> remotePlayers = new HashMap<>();
-
-
- public void setCurrentPlayer(String name, HashMap<String, Trainer> trainers) {
- Trainer trainer = trainers.get(name);
- Position position = new Position(trainer.getX(), trainer.getY());
- currentPlayer = new Player(name, position);
- }
-
- public void setRemotePlayers(HashMap<String, Trainer> trainers) {
- for (Map.Entry<String, Trainer> trainer: trainers.entrySet()) {
- if (trainer.getValue().getName().equals(currentPlayer.name)) {
- continue;
- }
-
- String name = trainer.getKey();
- Trainer obj = trainer.getValue();
- remotePlayers.put(name, new Player(name, new Position(
- obj.getX(),
- obj.getY()
- )));
- }
- }
-}
diff --git a/api/src/main/java/akkamon/api/models/HeartBeatEvent.java b/api/src/main/java/akkamon/api/models/HeartBeatEvent.java
new file mode 100644
index 0000000..1b3dd0e
--- /dev/null
+++ b/api/src/main/java/akkamon/api/models/HeartBeatEvent.java
@@ -0,0 +1,5 @@
+package akkamon.api.models;
+
+public class HeartBeatEvent extends Event {
+ public EventType type = EventType.HEART_BEAT;
+}
diff --git a/api/src/main/java/akkamon/api/models/Player.java b/api/src/main/java/akkamon/api/models/Player.java
deleted file mode 100644
index 3aebb4d..0000000
--- a/api/src/main/java/akkamon/api/models/Player.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package akkamon.api.models;
-
-import java.util.HashMap;
-
-public class Player {
- public String name;
- public Position position;
-
- public Player(String name, Position position) {
- this.name = name;
- this.position = position;
- }
-}
diff --git a/api/src/main/java/akkamon/api/models/Position.java b/api/src/main/java/akkamon/api/models/Position.java
deleted file mode 100644
index 3dd3402..0000000
--- a/api/src/main/java/akkamon/api/models/Position.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package akkamon.api.models;
-
-public class Position {
- public float x;
- public float y;
-
- public Position(float x, float y) {
- this.x = x;
- this.y = y;
- }
-}
diff --git a/api/src/main/java/akkamon/api/models/User.java b/api/src/main/java/akkamon/api/models/User.java
deleted file mode 100644
index 5f26ea0..0000000
--- a/api/src/main/java/akkamon/api/models/User.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package akkamon.api.models;
-
-public class User {
- public String name;
- public String password;
-
- public User(String name, String password) {
- this.name = name;
- this.password = password;
- }
-}