summaryrefslogtreecommitdiff
path: root/domain
diff options
context:
space:
mode:
authorMike Vink <mike1994vink@gmail.com>2021-07-20 20:55:26 +0200
committerMike Vink <mike1994vink@gmail.com>2021-07-20 20:55:26 +0200
commitb5ec13318a8b6a5f825eb726d6465873495a49ab (patch)
tree8fd086ceaa31d0b18cab6aa3e88f2668bf922788 /domain
parent5f016158e73a7828c9dec1810e54bbe2550d8c20 (diff)
feat(): figuring out movePlayerMessage
Diffstat (limited to 'domain')
-rw-r--r--domain/build.gradle4
-rw-r--r--domain/src/main/java/akkamon/domain/Akkamon.java6
-rw-r--r--domain/src/main/java/akkamon/domain/AkkamonImpl.java41
-rw-r--r--domain/src/main/java/akkamon/domain/AkkamonMessageEngine.java10
-rw-r--r--domain/src/main/java/akkamon/domain/AkkamonNexus.java50
-rw-r--r--domain/src/main/java/akkamon/domain/AkkamonSession.java5
-rw-r--r--domain/src/main/java/akkamon/domain/SceneTrainerGroup.java10
-rw-r--r--domain/src/test/java/akkamon/domain/AkkamonImplTest.java16
-rw-r--r--domain/src/test/java/akkamon/domain/AkkamonNexusTest.java14
9 files changed, 71 insertions, 85 deletions
diff --git a/domain/build.gradle b/domain/build.gradle
index 4b7063a..efe3079 100644
--- a/domain/build.gradle
+++ b/domain/build.gradle
@@ -26,10 +26,6 @@ dependencies {
implementation 'ch.qos.logback:logback-classic:1.2.3'
implementation 'junit:junit:4.12'
- // Reference the domain subproject.
- implementation project(':api')
-
-
testImplementation "com.typesafe.akka:akka-actor-testkit-typed_${versions.ScalaBinary}"
testImplementation "com.typesafe.akka:akka-stream-testkit_${versions.ScalaBinary}"
diff --git a/domain/src/main/java/akkamon/domain/Akkamon.java b/domain/src/main/java/akkamon/domain/Akkamon.java
deleted file mode 100644
index 602a6fe..0000000
--- a/domain/src/main/java/akkamon/domain/Akkamon.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package akkamon.domain;
-
-public interface Akkamon {
- void newPlayerConnected(String name, String password);
- void updateTrainerPosition(String name, float x, float y);
-}
diff --git a/domain/src/main/java/akkamon/domain/AkkamonImpl.java b/domain/src/main/java/akkamon/domain/AkkamonImpl.java
deleted file mode 100644
index 534abf2..0000000
--- a/domain/src/main/java/akkamon/domain/AkkamonImpl.java
+++ /dev/null
@@ -1,41 +0,0 @@
-package akkamon.domain;
-
-import java.util.HashMap;
-
-public class AkkamonImpl implements Akkamon {
-
- private static AkkamonImpl instance;
-
- private static HashMap<String, Trainer> dummyTrainersCollection = new HashMap<>();
-
- public static AkkamonImpl getInstance() {
- if (instance == null) {
- instance = new AkkamonImpl();
- }
- return instance;
- }
-
- @Override
- public void newPlayerConnected(String name, String password) {
- // switch (dummyTrainersCollection.size()) {
- // case 0:
- // dummyTrainersCollection.put("Ash", new Trainer("Ash"));
- // break;
- // case 1:
- // dummyTrainersCollection.put("Misty", new Trainer("Misty"));
- // break;
- // }
- }
-
- public void updateTrainerPosition(String name, float x, float y) {
- // Trainer trainer = dummyTrainersCollection.get(name);
- // trainer.newPosition(x, y);
- }
-
- public HashMap<String, Trainer> getDummyTrainersCollection() {
- return dummyTrainersCollection;
- }
-
-
-
-}
diff --git a/domain/src/main/java/akkamon/domain/AkkamonMessageEngine.java b/domain/src/main/java/akkamon/domain/AkkamonMessageEngine.java
new file mode 100644
index 0000000..fd22ce1
--- /dev/null
+++ b/domain/src/main/java/akkamon/domain/AkkamonMessageEngine.java
@@ -0,0 +1,10 @@
+package akkamon.domain;
+
+public interface AkkamonMessageEngine {
+ // broadcasts position info to WebSocket Clients
+ void broadCastGridPosition();
+
+ void registerTrainerSession(String trainerId, AkkamonSession session);
+
+ void removeTrainerSession(String trainerId, AkkamonSession session);
+}
diff --git a/domain/src/main/java/akkamon/domain/AkkamonNexus.java b/domain/src/main/java/akkamon/domain/AkkamonNexus.java
index a64e751..acae59d 100644
--- a/domain/src/main/java/akkamon/domain/AkkamonNexus.java
+++ b/domain/src/main/java/akkamon/domain/AkkamonNexus.java
@@ -18,20 +18,32 @@ public class AkkamonNexus extends AbstractBehavior<AkkamonNexus.Command> {
public static class RequestTrainerRegistration implements AkkamonNexus.Command, SceneTrainerGroup.Command {
public String trainerId;
public String sceneId;
- public ActorRef<TrainerRegistered> replyTo;
-
- public RequestTrainerRegistration(String trainerId, String sceneId, ActorRef<TrainerRegistered> replyTo) {
+ public AkkamonSession session;
+ public ActorRef<Command> replyTo;
+
+ public RequestTrainerRegistration(
+ String trainerId,
+ String sceneId,
+ AkkamonSession session,
+ ActorRef<Command> replyTo
+ ) {
this.trainerId = trainerId;
this.sceneId = sceneId;
+ this.session = session;
this.replyTo = replyTo;
}
}
- public static class TrainerRegistered {
- private ActorRef<Trainer.Command> trainer;
+ public static class TrainerRegistered implements Command {
+ private String trainerId;
+ private AkkamonSession session;
- public TrainerRegistered(ActorRef<Trainer.Command> trainer) {
- this.trainer = trainer;
+ public TrainerRegistered(
+ String trainerId,
+ AkkamonSession session
+ ) {
+ this.trainerId = trainerId;
+ this.session = session;
}
}
@@ -40,16 +52,17 @@ public class AkkamonNexus extends AbstractBehavior<AkkamonNexus.Command> {
}
}
-
- public static Behavior<AkkamonNexus.Command> create() {
- return Behaviors.setup(AkkamonNexus::new);
+ public static Behavior<AkkamonNexus.Command> create(AkkamonMessageEngine messagingEngine) {
+ return Behaviors.setup(context -> new AkkamonNexus(context, messagingEngine));
}
+ private AkkamonMessageEngine messageEngine;
private Map<String, ActorRef<SceneTrainerGroup.Command>> sceneIdToActor = new HashMap<>();
- public AkkamonNexus(ActorContext<Command> context) {
+ public AkkamonNexus(ActorContext<Command> context, AkkamonMessageEngine msgEngine) {
super(context);
- getContext().getLog().info("AkkamonNexus is spinning");
+ this.messageEngine = msgEngine;
+ getContext().getLog().info("AkkamonNexus is up and running, waiting eagerly for your messages!");
}
@Override
@@ -59,13 +72,26 @@ public class AkkamonNexus extends AbstractBehavior<AkkamonNexus.Command> {
RequestTrainerRegistration.class,
this::onTrainerRegistration
)
+ .onMessage(
+ TrainerRegistered.class,
+ this::onTrainerRegistered
+ )
.build();
}
+ private AkkamonNexus onTrainerRegistered(TrainerRegistered reply) {
+ // TODO test when registration fails?
+ getContext().getLog().info("Adding {} to Live AkkamonSessions in Messaging Engine", reply.trainerId);
+ messageEngine.registerTrainerSession(reply.trainerId, reply.session);
+ return this;
+ }
+
private AkkamonNexus onTrainerRegistration(RequestTrainerRegistration registrationRequest) {
String sceneId = registrationRequest.sceneId;
String trainerId = registrationRequest.trainerId;
+ getContext().getLog().info("Nexus received registration request for {} in {}", trainerId, sceneId);
+
ActorRef<SceneTrainerGroup.Command> sceneTrainerGroup = sceneIdToActor.get(sceneId);
if (sceneTrainerGroup != null) {
sceneTrainerGroup.tell(registrationRequest);
diff --git a/domain/src/main/java/akkamon/domain/AkkamonSession.java b/domain/src/main/java/akkamon/domain/AkkamonSession.java
new file mode 100644
index 0000000..b04aaab
--- /dev/null
+++ b/domain/src/main/java/akkamon/domain/AkkamonSession.java
@@ -0,0 +1,5 @@
+package akkamon.domain;
+
+public interface AkkamonSession {
+ void send(String event);
+}
diff --git a/domain/src/main/java/akkamon/domain/SceneTrainerGroup.java b/domain/src/main/java/akkamon/domain/SceneTrainerGroup.java
index fb9456a..e6bd8ce 100644
--- a/domain/src/main/java/akkamon/domain/SceneTrainerGroup.java
+++ b/domain/src/main/java/akkamon/domain/SceneTrainerGroup.java
@@ -54,7 +54,10 @@ public class SceneTrainerGroup extends AbstractBehavior<SceneTrainerGroup.Comman
if (this.sceneId.equals(registrationRequest.sceneId)) {
ActorRef<Trainer.Command> trainerActor = trainerIdToActor.get(registrationRequest.trainerId);
if (trainerActor != null) {
- registrationRequest.replyTo.tell(new AkkamonNexus.TrainerRegistered(trainerActor));
+ registrationRequest.replyTo.tell(new AkkamonNexus.TrainerRegistered(
+ registrationRequest.trainerId,
+ registrationRequest.session
+ ));
} else {
getContext().getLog().info("Creating trainer actor for {}", registrationRequest.trainerId);
trainerActor =
@@ -63,7 +66,10 @@ public class SceneTrainerGroup extends AbstractBehavior<SceneTrainerGroup.Comman
getContext()
.watchWith(trainerActor, new SceneTrainerGroup.TrainerOffline(trainerActor, sceneId, registrationRequest.trainerId));
trainerIdToActor.put(registrationRequest.trainerId, trainerActor);
- registrationRequest.replyTo.tell(new AkkamonNexus.TrainerRegistered(trainerActor));
+ registrationRequest.replyTo.tell(new AkkamonNexus.TrainerRegistered(
+ registrationRequest.trainerId,
+ registrationRequest.session
+ ));
}
} else {
getContext()
diff --git a/domain/src/test/java/akkamon/domain/AkkamonImplTest.java b/domain/src/test/java/akkamon/domain/AkkamonImplTest.java
deleted file mode 100644
index 90c4f44..0000000
--- a/domain/src/test/java/akkamon/domain/AkkamonImplTest.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package akkamon.domain;
-
-import org.junit.Test;
-
-import static junit.framework.TestCase.assertNotNull;
-
-class AkkamonImplTest {
-
- class getInstance_behaviour {
- @Test
- void given_there_is_no_instance_yet_when_getInstance_is_called_then_give_class_property_instance() {
- assertNotNull(AkkamonImpl.getInstance());
- }
- }
-
-} \ No newline at end of file
diff --git a/domain/src/test/java/akkamon/domain/AkkamonNexusTest.java b/domain/src/test/java/akkamon/domain/AkkamonNexusTest.java
index 5150b1c..d83bdcb 100644
--- a/domain/src/test/java/akkamon/domain/AkkamonNexusTest.java
+++ b/domain/src/test/java/akkamon/domain/AkkamonNexusTest.java
@@ -13,15 +13,21 @@ public class AkkamonNexusTest {
@Test
public void given_a_registration_request_when_no_scene_or_trainer_exists_in_the_system_then_create_scene_and_trainer_and_reply() {
- TestProbe<AkkamonNexus.TrainerRegistered> probe =
- testKit.createTestProbe(AkkamonNexus.TrainerRegistered.class);
+ TestProbe<AkkamonNexus.Command> probe =
+ testKit.createTestProbe(AkkamonNexus.Command.class);
ActorRef<SceneTrainerGroup.Command> sceneTrainerGroupActor =
testKit.spawn(SceneTrainerGroup.create("start"));
- sceneTrainerGroupActor.tell(new AkkamonNexus.RequestTrainerRegistration("ash", "start", probe.getRef()));
+ // TODO use mockito to mock AkkamonSessions
- probe.expectMessageClass(AkkamonNexus.TrainerRegistered.class);
+ // sceneTrainerGroupActor.tell(new AkkamonNexus.RequestTrainerRegistration(
+ // "ash",
+ // "start",
+ // probe.getRef()
+ // ));
+
+ // probe.expectMessageClass(AkkamonNexus.TrainerRegistered.class);
}