diff options
Diffstat (limited to 'api')
5 files changed, 84 insertions, 11 deletions
diff --git a/api/src/main/java/akkamon/api/MessagingEngine.java b/api/src/main/java/akkamon/api/MessagingEngine.java index 191ac1a..3cdd7be 100644 --- a/api/src/main/java/akkamon/api/MessagingEngine.java +++ b/api/src/main/java/akkamon/api/MessagingEngine.java @@ -4,6 +4,7 @@ import akka.actor.typed.ActorRef; import akka.actor.typed.ActorSystem; import akkamon.api.models.Event; import akkamon.api.models.HeartBeatEvent; +import akkamon.api.models.InteractionRequest; import akkamon.api.models.TrainerRegistrationReplyEvent; import akkamon.domain.AkkamonMessageEngine; import akkamon.domain.AkkamonNexus; @@ -17,6 +18,7 @@ import java.util.concurrent.TimeUnit; public class MessagingEngine implements AkkamonMessageEngine { private Map<String, Set<AkkamonSession>> sceneIdToAkkamonSessions = new HashMap<>(); + private Map<String, AkkamonSession> trainerIdToAkkamonSessions = new HashMap<>(); private Gson gson = new Gson(); private ActorRef<AkkamonNexus.Command> system; @@ -45,8 +47,8 @@ public class MessagingEngine implements AkkamonMessageEngine { public void broadCastHeartBeatToScene(String sceneId, Map<String, AkkamonNexus.MovementQueueReading> trainerPositions) { Set<AkkamonSession> sceneSessions = sceneIdToAkkamonSessions.get(sceneId); - System.out.println(sceneSessions); - System.out.println(sceneIdToAkkamonSessions.keySet()); + // System.out.println(sceneSessions); + // System.out.println(sceneIdToAkkamonSessions.keySet()); if (sceneSessions != null) { for (AkkamonSession session : sceneSessions) { Map<String, AkkamonNexus.MovementQueueReading> withoutSelf = new HashMap<>(trainerPositions); @@ -55,8 +57,8 @@ public class MessagingEngine implements AkkamonMessageEngine { withoutSelf ); String heartBeatMessage = gson.toJson(heartBeat); - System.out.println("Sending to " + session.getTrainerId()); - System.out.println(heartBeatMessage); + // System.out.println("Sending to " + session.getTrainerId()); + // System.out.println(heartBeatMessage); session.send( heartBeatMessage ); @@ -65,20 +67,40 @@ public class MessagingEngine implements AkkamonMessageEngine { } @Override - public void registerTrainerSessionToScene(String sceneId, AkkamonSession session) { + public void broadCastInteractionRequestToSessionWithTrainerIds(List<String> trainerIds, String type, String trainerId, long requestId) { + for (String id : trainerIds) { + AkkamonSession session = trainerIdToAkkamonSessions.get(id); + if (session != null) { + session.send(gson.toJson( + new InteractionRequest( + type, + trainerId, + requestId + ) + )); + } + } + } + + @Override + public void registerTrainerSessionToSceneAndTrainerIdMaps(String sceneId, AkkamonSession session) { System.out.println("Registering session to scene " + sceneId); - Set<AkkamonSession> sessionsInScene = sceneIdToAkkamonSessions.get(sceneId); - if (sessionsInScene != null) { - sessionsInScene.add(session); + Set<AkkamonSession> sceneIdMapping = sceneIdToAkkamonSessions.get(sceneId); + AkkamonSession trainerIdMapping = trainerIdToAkkamonSessions.get(session.getTrainerId()); + if (sceneIdMapping != null) { + sceneIdMapping.add(session); } else { - sessionsInScene = new HashSet<>(); - sessionsInScene.add(session); + sceneIdMapping = new HashSet<>(); + sceneIdMapping.add(session); sceneIdToAkkamonSessions.put(sceneId, - sessionsInScene + sceneIdMapping ); System.out.println(sceneIdToAkkamonSessions.keySet()); } + trainerIdToAkkamonSessions.put(session.getTrainerId(), session); + System.out.println(trainerIdToAkkamonSessions); + System.out.println("Sending trainerId: " + session.getTrainerId()); // TODO what if registration goes wrong ... session.send( @@ -113,6 +135,18 @@ public class MessagingEngine implements AkkamonMessageEngine { String sceneId = "DemoScene"; switch (event.type) { + case INTERACTION_REQUEST: + System.out.println("received interaction request"); + System.out.println(event.interaction); + system.tell(new AkkamonNexus.RequestInteraction( + UUID.randomUUID().getMostSignificantBits() & Long.MAX_VALUE, + event.type.name(), + event.sceneId, + event.interaction.requestingTrainerId, + event.interaction.receivingTrainerIds, + system + )); + break; case START_MOVING: system.tell(new AkkamonNexus.RequestStartMoving( UUID.randomUUID().getMostSignificantBits() & Long.MAX_VALUE, diff --git a/api/src/main/java/akkamon/api/models/Event.java b/api/src/main/java/akkamon/api/models/Event.java index 8354b10..646e671 100644 --- a/api/src/main/java/akkamon/api/models/Event.java +++ b/api/src/main/java/akkamon/api/models/Event.java @@ -9,4 +9,5 @@ public class Event { public Direction direction; public String sceneId; public TilePos tilePos; + public Interaction interaction; } diff --git a/api/src/main/java/akkamon/api/models/EventType.java b/api/src/main/java/akkamon/api/models/EventType.java index 67bb28d..610bd62 100644 --- a/api/src/main/java/akkamon/api/models/EventType.java +++ b/api/src/main/java/akkamon/api/models/EventType.java @@ -24,4 +24,7 @@ public enum EventType { @SerializedName("SocketClosed") SOCKET_CLOSED, + @SerializedName("InteractionRequestEvent") + INTERACTION_REQUEST + } diff --git a/api/src/main/java/akkamon/api/models/Interaction.java b/api/src/main/java/akkamon/api/models/Interaction.java new file mode 100644 index 0000000..5bc9d17 --- /dev/null +++ b/api/src/main/java/akkamon/api/models/Interaction.java @@ -0,0 +1,21 @@ +package akkamon.api.models; + +import java.util.List; + +public class Interaction { + public String type; + public String requestingTrainerId; + public List<String> receivingTrainerIds; + + public Interaction(String type, String requestingTrainerId, List<String> receivingTrainerIds) { + this.type = type; + this.requestingTrainerId = requestingTrainerId; + this.receivingTrainerIds = receivingTrainerIds; + } + + public String toString() { + return "interaction={\n\ttype: " + this.type + ",\n" + + "\trequestingTrainerId: " + this.requestingTrainerId + ",\n" + + "\treceivingTrainerIds: " + this.receivingTrainerIds + "\n}"; + } +} diff --git a/api/src/main/java/akkamon/api/models/InteractionRequest.java b/api/src/main/java/akkamon/api/models/InteractionRequest.java new file mode 100644 index 0000000..32f4974 --- /dev/null +++ b/api/src/main/java/akkamon/api/models/InteractionRequest.java @@ -0,0 +1,14 @@ +package akkamon.api.models; + +public class InteractionRequest extends Event { + + public String type; + public String trainerId; + public long requestId; + + public InteractionRequest(String type, String trainerId, long requestId) { + this.type = type; + this.trainerId = trainerId; + this.requestId = requestId; + } +} |
