diff options
| author | Mike Vink <mike1994vink@gmail.com> | 2021-07-21 12:46:35 +0200 |
|---|---|---|
| committer | Mike Vink <mike1994vink@gmail.com> | 2021-07-21 12:46:35 +0200 |
| commit | da613e94970da31409464c81740162f9bd7c7831 (patch) | |
| tree | e16a81890f5e43b771ae8a227580e9a535b82652 /api | |
| parent | f4dc48cd8359d5b8da35f678ae6630c5c4427769 (diff) | |
feat(): start making heartbeatquery
Diffstat (limited to 'api')
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; + } } |
