summaryrefslogtreecommitdiff
path: root/api
diff options
context:
space:
mode:
Diffstat (limited to 'api')
-rw-r--r--api/src/main/java/akkamon/api/MessagingEngine.java56
-rw-r--r--api/src/main/java/akkamon/api/models/Event.java1
-rw-r--r--api/src/main/java/akkamon/api/models/EventType.java3
-rw-r--r--api/src/main/java/akkamon/api/models/Interaction.java21
-rw-r--r--api/src/main/java/akkamon/api/models/InteractionRequest.java14
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;
+ }
+}