From a4f04b78b15f13985da568e0189e2bad3269b1a5 Mon Sep 17 00:00:00 2001 From: Mike Vink Date: Thu, 22 Jul 2021 17:46:45 +0200 Subject: feat(remotePlayerEngine): render remote players! --- api/src/main/java/akkamon/api/EventSocket.java | 1 + api/src/main/java/akkamon/api/MessagingEngine.java | 23 ++++++++++++++++++---- .../main/java/akkamon/api/models/EventType.java | 2 ++ .../java/akkamon/api/models/HeartBeatEvent.java | 6 +++--- .../java/akkamon/api/models/SocketClosedEvent.java | 8 ++++++++ 5 files changed, 33 insertions(+), 7 deletions(-) create mode 100644 api/src/main/java/akkamon/api/models/SocketClosedEvent.java (limited to 'api') diff --git a/api/src/main/java/akkamon/api/EventSocket.java b/api/src/main/java/akkamon/api/EventSocket.java index f800ab3..77950ed 100644 --- a/api/src/main/java/akkamon/api/EventSocket.java +++ b/api/src/main/java/akkamon/api/EventSocket.java @@ -33,6 +33,7 @@ public class EventSocket extends WebSocketAdapter implements AkkamonSession { super.onWebSocketClose(statusCode, reason); System.out.println("Socket Closed: [" + statusCode + "] " + reason); closureLatch.countDown(); + App.messagingEngine.trainerDisconnected(this); } @Override diff --git a/api/src/main/java/akkamon/api/MessagingEngine.java b/api/src/main/java/akkamon/api/MessagingEngine.java index dc22752..3d3cd96 100644 --- a/api/src/main/java/akkamon/api/MessagingEngine.java +++ b/api/src/main/java/akkamon/api/MessagingEngine.java @@ -42,13 +42,13 @@ public class MessagingEngine implements AkkamonMessageEngine { @Override public void broadCastHeartBeatToScene(String sceneId, - Map trainerPositions) { + 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); + Map withoutSelf = new HashMap<>(trainerPositions); withoutSelf.remove(session.getTrainerId()); HeartBeatEvent heartBeat = new HeartBeatEvent( withoutSelf @@ -82,7 +82,23 @@ public class MessagingEngine implements AkkamonMessageEngine { @Override public void removeTrainerSessionFromScene(String sceneId, AkkamonSession session) { + this.sceneIdToAkkamonSessions.get(sceneId).remove(session); + } + + @Override + public void trainerDisconnected(AkkamonSession session) { + String sceneId = null; + for (Map.Entry> entry : this.sceneIdToAkkamonSessions.entrySet()) { + if (entry.getValue().contains(session)) sceneId = entry.getKey(); + } + system.tell(new AkkamonNexus.RequestTrainerOffline( + UUID.randomUUID().getMostSignificantBits() & Long.MAX_VALUE, + session.getTrainerId(), + sceneId, + session, + system + )); } void incoming(AkkamonSession session, String message) { @@ -123,7 +139,7 @@ public class MessagingEngine implements AkkamonMessageEngine { ); break; case TRAINER_REGISTRATION: - String trainerId = String.valueOf(sceneIdToAkkamonSessions.size()); + String trainerId = String.valueOf(sceneIdToAkkamonSessions.get(sceneId) == null ? 0 : sceneIdToAkkamonSessions.get(sceneId).size() + 1); system.tell(new AkkamonNexus.RequestTrainerRegistration( trainerId, sceneId, @@ -141,5 +157,4 @@ public class MessagingEngine implements AkkamonMessageEngine { private void updatePositions() { } - } diff --git a/api/src/main/java/akkamon/api/models/EventType.java b/api/src/main/java/akkamon/api/models/EventType.java index be3b2b3..cb10cee 100644 --- a/api/src/main/java/akkamon/api/models/EventType.java +++ b/api/src/main/java/akkamon/api/models/EventType.java @@ -18,5 +18,7 @@ public enum EventType { @SerializedName("StopMoving") STOP_MOVING, + @SerializedName("SocketClosed") + SOCKET_CLOSED, } diff --git a/api/src/main/java/akkamon/api/models/HeartBeatEvent.java b/api/src/main/java/akkamon/api/models/HeartBeatEvent.java index 8db514b..b795feb 100644 --- a/api/src/main/java/akkamon/api/models/HeartBeatEvent.java +++ b/api/src/main/java/akkamon/api/models/HeartBeatEvent.java @@ -5,10 +5,10 @@ import akkamon.domain.AkkamonNexus; import java.util.Map; public class HeartBeatEvent extends Event { - public Map remoteTrainerPositions; + public Map remoteMovementQueues; - public HeartBeatEvent(Map remoteTrainerPositions) { + public HeartBeatEvent(Map remoteMovementQueues) { this.type = EventType.HEART_BEAT; - this.remoteTrainerPositions = remoteTrainerPositions; + this.remoteMovementQueues = remoteMovementQueues; } } diff --git a/api/src/main/java/akkamon/api/models/SocketClosedEvent.java b/api/src/main/java/akkamon/api/models/SocketClosedEvent.java new file mode 100644 index 0000000..1f8a2a0 --- /dev/null +++ b/api/src/main/java/akkamon/api/models/SocketClosedEvent.java @@ -0,0 +1,8 @@ +package akkamon.api.models; + +public class SocketClosedEvent extends Event { + + public SocketClosedEvent() { + this.type = EventType.SOCKET_CLOSED; + } +} -- cgit v1.2.3