From 5d76a30aeba5bfd175b60845c4935c4352b46f4c Mon Sep 17 00:00:00 2001 From: Mike Vink Date: Wed, 21 Jul 2021 16:48:47 +0200 Subject: feat(): heartbeat working on remote engine --- api/src/main/java/akkamon/api/MessagingEngine.java | 45 ++++++++++++++++------ .../java/akkamon/api/models/HeartBeatEvent.java | 9 ++++- 2 files changed, 42 insertions(+), 12 deletions(-) (limited to 'api') diff --git a/api/src/main/java/akkamon/api/MessagingEngine.java b/api/src/main/java/akkamon/api/MessagingEngine.java index 17b8f08..dc22752 100644 --- a/api/src/main/java/akkamon/api/MessagingEngine.java +++ b/api/src/main/java/akkamon/api/MessagingEngine.java @@ -3,15 +3,13 @@ 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; import com.google.gson.Gson; -import java.util.HashMap; -import java.util.Map; -import java.util.Set; -import java.util.UUID; +import java.util.*; import java.util.concurrent.ScheduledThreadPoolExecutor; import java.util.concurrent.TimeUnit; @@ -43,18 +41,43 @@ public class MessagingEngine implements AkkamonMessageEngine { } @Override - public void broadCastToScene(String sceneId, String message) { - Set sessionsInScene = sceneIdToAkkamonSessions.get(sceneId); - for (AkkamonSession session : sessionsInScene) { - session.send(message); + public void broadCastHeartBeatToScene(String sceneId, + Map trainerPositions) { + Set sceneSessions = sceneIdToAkkamonSessions.get(sceneId); + System.out.println(sceneSessions); + System.out.println(sceneIdToAkkamonSessions.keySet()); + if (sceneSessions != null) { + for (AkkamonSession session : sceneSessions) { + Map withoutSelf = new HashMap<>(trainerPositions); + withoutSelf.remove(session.getTrainerId()); + HeartBeatEvent heartBeat = new HeartBeatEvent( + withoutSelf + ); + String heartBeatMessage = gson.toJson(heartBeat); + System.out.println("Sending to " + session.getTrainerId()); + System.out.println(heartBeatMessage); + session.send( + heartBeatMessage + ); + } } } @Override public void registerTrainerSessionToScene(String sceneId, AkkamonSession session) { - sceneIdToAkkamonSessions.get(sceneId).add(session); - session.setTrainerId(sceneId); - heartBeat(); + System.out.println("Registering session to scene " + sceneId); + Set sessionsInScene = sceneIdToAkkamonSessions.get(sceneId); + if (sessionsInScene != null) { + sessionsInScene.add(session); + } else { + sessionsInScene = new HashSet<>(); + sessionsInScene.add(session); + sceneIdToAkkamonSessions.put(sceneId, + sessionsInScene + ); + System.out.println(sceneIdToAkkamonSessions.keySet()); + } + //heartBeat(); } @Override diff --git a/api/src/main/java/akkamon/api/models/HeartBeatEvent.java b/api/src/main/java/akkamon/api/models/HeartBeatEvent.java index 472c7e4..8db514b 100644 --- a/api/src/main/java/akkamon/api/models/HeartBeatEvent.java +++ b/api/src/main/java/akkamon/api/models/HeartBeatEvent.java @@ -1,7 +1,14 @@ package akkamon.api.models; +import akkamon.domain.AkkamonNexus; + +import java.util.Map; + public class HeartBeatEvent extends Event { - public HeartBeatEvent() { + public Map remoteTrainerPositions; + + public HeartBeatEvent(Map remoteTrainerPositions) { this.type = EventType.HEART_BEAT; + this.remoteTrainerPositions = remoteTrainerPositions; } } -- cgit v1.2.3