summaryrefslogtreecommitdiff
path: root/api
diff options
context:
space:
mode:
authorMike Vink <mike1994vink@gmail.com>2021-07-21 12:46:35 +0200
committerMike Vink <mike1994vink@gmail.com>2021-07-21 12:46:35 +0200
commitda613e94970da31409464c81740162f9bd7c7831 (patch)
treee16a81890f5e43b771ae8a227580e9a535b82652 /api
parentf4dc48cd8359d5b8da35f678ae6630c5c4427769 (diff)
feat(): start making heartbeatquery
Diffstat (limited to 'api')
-rw-r--r--api/src/main/java/akkamon/api/EventSocket.java12
-rw-r--r--api/src/main/java/akkamon/api/MessagingEngine.java61
-rw-r--r--api/src/main/java/akkamon/api/models/Event.java2
-rw-r--r--api/src/main/java/akkamon/api/models/EventType.java10
-rw-r--r--api/src/main/java/akkamon/api/models/HeartBeatEvent.java4
5 files changed, 69 insertions, 20 deletions
diff --git a/api/src/main/java/akkamon/api/EventSocket.java b/api/src/main/java/akkamon/api/EventSocket.java
index 7b9619a..f800ab3 100644
--- a/api/src/main/java/akkamon/api/EventSocket.java
+++ b/api/src/main/java/akkamon/api/EventSocket.java
@@ -10,6 +10,7 @@ import java.util.concurrent.CountDownLatch;
public class EventSocket extends WebSocketAdapter implements AkkamonSession {
private final CountDownLatch closureLatch = new CountDownLatch(1);
+ private String trainerId;
@Override
public void onWebSocketConnect(Session sess)
@@ -22,7 +23,6 @@ public class EventSocket extends WebSocketAdapter implements AkkamonSession {
public void onWebSocketText(String message)
{
super.onWebSocketText(message);
- System.out.println("Received TEXT message: " + message);
App.messagingEngine.incoming(this, message);
}
@@ -56,4 +56,14 @@ public class EventSocket extends WebSocketAdapter implements AkkamonSession {
e.printStackTrace();
}
}
+
+ @Override
+ public void setTrainerId(String trainerId) {
+ this.trainerId = trainerId;
+ }
+
+ @Override
+ public String getTrainerId() {
+ return trainerId;
+ }
}
diff --git a/api/src/main/java/akkamon/api/MessagingEngine.java b/api/src/main/java/akkamon/api/MessagingEngine.java
index e888d8b..17b8f08 100644
--- a/api/src/main/java/akkamon/api/MessagingEngine.java
+++ b/api/src/main/java/akkamon/api/MessagingEngine.java
@@ -3,7 +3,6 @@ package akkamon.api;
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;
@@ -11,13 +10,14 @@ import com.google.gson.Gson;
import java.util.HashMap;
import java.util.Map;
+import java.util.Set;
import java.util.UUID;
import java.util.concurrent.ScheduledThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
public class MessagingEngine implements AkkamonMessageEngine {
- private Map<String, AkkamonSession> trainerIdToAkkamonSessions = new HashMap<>();
+ private Map<String, Set<AkkamonSession>> sceneIdToAkkamonSessions = new HashMap<>();
private Gson gson = new Gson();
private ActorRef<AkkamonNexus.Command> system;
@@ -36,44 +36,71 @@ public class MessagingEngine implements AkkamonMessageEngine {
}
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()));
- }
- }
+ system.tell(new AkkamonNexus.RequestHeartBeat(
+ UUID.randomUUID().getMostSignificantBits() & Long.MAX_VALUE,
+ system
+ ));
}
@Override
- public void broadCastGridPosition() {
+ public void broadCastToScene(String sceneId, String message) {
+ Set<AkkamonSession> sessionsInScene = sceneIdToAkkamonSessions.get(sceneId);
+ for (AkkamonSession session : sessionsInScene) {
+ session.send(message);
+ }
}
@Override
- public void registerTrainerSession(String trainerId, AkkamonSession session) {
- trainerIdToAkkamonSessions.put(trainerId, session);
+ public void registerTrainerSessionToScene(String sceneId, AkkamonSession session) {
+ sceneIdToAkkamonSessions.get(sceneId).add(session);
+ session.setTrainerId(sceneId);
+ heartBeat();
}
@Override
- public void removeTrainerSession(String trainerId, AkkamonSession session) {
+ public void removeTrainerSessionFromScene(String sceneId, AkkamonSession session) {
}
void incoming(AkkamonSession session, String message) {
Event event = gson.fromJson(message, Event.class);
- String trainerId = String.valueOf(trainerIdToAkkamonSessions.size());
+ // TODO use session trainerId
String sceneId = "akkamonStartScene";
switch (event.type) {
case START_MOVING:
system.tell(new AkkamonNexus.RequestStartMoving(
UUID.randomUUID().getMostSignificantBits() & Long.MAX_VALUE,
- "0",
+ session.getTrainerId(),
event.sceneId,
- event.direction
+ event.direction,
+ system
));
break;
+ case NEW_TILE_POS:
+ system.tell(
+ new AkkamonNexus.RequestNewTilePos(
+ UUID.randomUUID().getMostSignificantBits() & Long.MAX_VALUE,
+ session.getTrainerId(),
+ event.sceneId,
+ event.tilePos,
+ system
+ )
+ );
+ break;
+ case STOP_MOVING:
+ system.tell(
+ new AkkamonNexus.RequestStopMoving(
+ UUID.randomUUID().getMostSignificantBits() & Long.MAX_VALUE,
+ session.getTrainerId(),
+ event.sceneId,
+ event.direction,
+ system
+ )
+ );
+ break;
case TRAINER_REGISTRATION:
-
+ String trainerId = String.valueOf(sceneIdToAkkamonSessions.size());
system.tell(new AkkamonNexus.RequestTrainerRegistration(
trainerId,
sceneId,
@@ -82,7 +109,7 @@ public class MessagingEngine implements AkkamonMessageEngine {
));
break;
case HEART_BEAT:
- System.out.println("My heart goes boom skip!");
+ //System.out.println("My <3 beats!");
break;
}
diff --git a/api/src/main/java/akkamon/api/models/Event.java b/api/src/main/java/akkamon/api/models/Event.java
index 351d39f..8354b10 100644
--- a/api/src/main/java/akkamon/api/models/Event.java
+++ b/api/src/main/java/akkamon/api/models/Event.java
@@ -1,10 +1,12 @@
package akkamon.api.models;
import akkamon.domain.Direction;
+import akkamon.domain.TilePos;
public class Event {
public EventType type;
public String trainerId;
public Direction direction;
public String sceneId;
+ public TilePos tilePos;
}
diff --git a/api/src/main/java/akkamon/api/models/EventType.java b/api/src/main/java/akkamon/api/models/EventType.java
index ad537a5..be3b2b3 100644
--- a/api/src/main/java/akkamon/api/models/EventType.java
+++ b/api/src/main/java/akkamon/api/models/EventType.java
@@ -10,5 +10,13 @@ public enum EventType {
HEART_BEAT,
@SerializedName("StartMoving")
- START_MOVING
+ START_MOVING,
+
+ @SerializedName("NewTilePos")
+ NEW_TILE_POS,
+
+ @SerializedName("StopMoving")
+ STOP_MOVING,
+
+
}
diff --git a/api/src/main/java/akkamon/api/models/HeartBeatEvent.java b/api/src/main/java/akkamon/api/models/HeartBeatEvent.java
index 1b3dd0e..472c7e4 100644
--- a/api/src/main/java/akkamon/api/models/HeartBeatEvent.java
+++ b/api/src/main/java/akkamon/api/models/HeartBeatEvent.java
@@ -1,5 +1,7 @@
package akkamon.api.models;
public class HeartBeatEvent extends Event {
- public EventType type = EventType.HEART_BEAT;
+ public HeartBeatEvent() {
+ this.type = EventType.HEART_BEAT;
+ }
}