diff options
Diffstat (limited to 'api/src')
| -rw-r--r-- | api/src/main/java/akkamon/api/AkkamonMessageEngine.java | 6 | ||||
| -rw-r--r-- | api/src/main/java/akkamon/api/AkkamonSession.java | 4 | ||||
| -rw-r--r-- | api/src/main/java/akkamon/api/EventSocket.java | 11 | ||||
| -rw-r--r-- | api/src/main/java/akkamon/api/MessagingEngine.java | 64 | ||||
| -rw-r--r-- | api/src/main/java/akkamon/api/models/Event.java | 10 | ||||
| -rw-r--r-- | api/src/main/java/akkamon/api/models/EventType.java | 11 | ||||
| -rw-r--r-- | api/src/main/java/akkamon/api/models/GameState.java | 33 | ||||
| -rw-r--r-- | api/src/main/java/akkamon/api/models/HeartBeatEvent.java | 5 | ||||
| -rw-r--r-- | api/src/main/java/akkamon/api/models/Player.java | 13 | ||||
| -rw-r--r-- | api/src/main/java/akkamon/api/models/Position.java | 11 | ||||
| -rw-r--r-- | api/src/main/java/akkamon/api/models/User.java | 11 |
11 files changed, 88 insertions, 91 deletions
diff --git a/api/src/main/java/akkamon/api/AkkamonMessageEngine.java b/api/src/main/java/akkamon/api/AkkamonMessageEngine.java deleted file mode 100644 index 2bbe0c8..0000000 --- a/api/src/main/java/akkamon/api/AkkamonMessageEngine.java +++ /dev/null @@ -1,6 +0,0 @@ -package akkamon.api; - -public interface AkkamonMessageEngine { - // broadcasts position info to WebSocket Clients - void broadCastGridPosition(); -} diff --git a/api/src/main/java/akkamon/api/AkkamonSession.java b/api/src/main/java/akkamon/api/AkkamonSession.java deleted file mode 100644 index 048071c..0000000 --- a/api/src/main/java/akkamon/api/AkkamonSession.java +++ /dev/null @@ -1,4 +0,0 @@ -package akkamon.api; - -public interface AkkamonSession { -} diff --git a/api/src/main/java/akkamon/api/EventSocket.java b/api/src/main/java/akkamon/api/EventSocket.java index 092d763..7b9619a 100644 --- a/api/src/main/java/akkamon/api/EventSocket.java +++ b/api/src/main/java/akkamon/api/EventSocket.java @@ -1,8 +1,10 @@ package akkamon.api; +import akkamon.domain.AkkamonSession; import org.eclipse.jetty.websocket.api.Session; import org.eclipse.jetty.websocket.api.WebSocketAdapter; +import java.io.IOException; import java.util.concurrent.CountDownLatch; @@ -45,4 +47,13 @@ public class EventSocket extends WebSocketAdapter implements AkkamonSession { System.out.println("Awaiting closure from remote"); closureLatch.await(); } + + @Override + public void send(String event) { + try { + getRemote().sendString(event); + } catch (IOException e) { + e.printStackTrace(); + } + } } diff --git a/api/src/main/java/akkamon/api/MessagingEngine.java b/api/src/main/java/akkamon/api/MessagingEngine.java index bbab97e..4919b32 100644 --- a/api/src/main/java/akkamon/api/MessagingEngine.java +++ b/api/src/main/java/akkamon/api/MessagingEngine.java @@ -1,28 +1,84 @@ package akkamon.api; -import akkamon.api.models.GameState; +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.concurrent.ScheduledThreadPoolExecutor; +import java.util.concurrent.TimeUnit; public class MessagingEngine implements AkkamonMessageEngine { - private HashMap<String, AkkamonSession> akkamonSessions = new HashMap<>(); - private static MessagingEngine instance; + private Map<String, AkkamonSession> trainerIdToAkkamonSessions = new HashMap<>(); private Gson gson = new Gson(); + private ActorRef<AkkamonNexus.Command> system; + public MessagingEngine() { + this.system = ActorSystem.create(AkkamonNexus.create(this), "akkamon-system"); + + ScheduledThreadPoolExecutor executor = new ScheduledThreadPoolExecutor(2); + executor.scheduleAtFixedRate(new Runnable() { + @Override + public void run() { + heartBeat(); + } + }, 0, 200, TimeUnit.MILLISECONDS); + + } + + private void heartBeat() { + if (!trainerIdToAkkamonSessions.isEmpty()) { + for (Map.Entry<String, AkkamonSession> entry : trainerIdToAkkamonSessions.entrySet()) { + // System.out.println("heartbeat to " + entry.getKey()); + entry.getValue().send(gson.toJson(new HeartBeatEvent())); + } + } } @Override public void broadCastGridPosition() { } + @Override + public void registerTrainerSession(String trainerId, AkkamonSession session) { + trainerIdToAkkamonSessions.put(trainerId, session); + } + + @Override + public void removeTrainerSession(String trainerId, AkkamonSession session) { + + } + void incoming(AkkamonSession session, String message) { + Event event = gson.fromJson(message, Event.class); + switch (event.type) { + case TRAINER_REGISTRATION: + String trainerId = String.valueOf(trainerIdToAkkamonSessions.size()); + String sceneId = "AkkamonStartScene"; + + system.tell(new AkkamonNexus.RequestTrainerRegistration( + trainerId, + sceneId, + session, + system + )); + break; + case HEART_BEAT: + System.out.println("My heart goes boom skip!"); + break; + } } - private void updatePositions(GameState gameState) { + private void updatePositions() { } diff --git a/api/src/main/java/akkamon/api/models/Event.java b/api/src/main/java/akkamon/api/models/Event.java index 50fc849..8517b06 100644 --- a/api/src/main/java/akkamon/api/models/Event.java +++ b/api/src/main/java/akkamon/api/models/Event.java @@ -1,14 +1,6 @@ package akkamon.api.models; -import org.eclipse.jetty.server.Authentication; - public class Event { - public String type; - public GameState gameState; - public User user; + public EventType type; - public Event(String type, GameState gameState) { - this.type = type; - this.gameState = gameState; - } } diff --git a/api/src/main/java/akkamon/api/models/EventType.java b/api/src/main/java/akkamon/api/models/EventType.java new file mode 100644 index 0000000..1ca2ef2 --- /dev/null +++ b/api/src/main/java/akkamon/api/models/EventType.java @@ -0,0 +1,11 @@ +package akkamon.api.models; + +import com.google.gson.annotations.SerializedName; + +public enum EventType { + @SerializedName("PlayerRegistrationEvent") + TRAINER_REGISTRATION, + + @SerializedName("HeartBeat") + HEART_BEAT +} diff --git a/api/src/main/java/akkamon/api/models/GameState.java b/api/src/main/java/akkamon/api/models/GameState.java deleted file mode 100644 index d849fe5..0000000 --- a/api/src/main/java/akkamon/api/models/GameState.java +++ /dev/null @@ -1,33 +0,0 @@ -package akkamon.api.models; - -import akkamon.domain.Trainer; - -import java.util.HashMap; -import java.util.Map; - -public class GameState { - public Player currentPlayer; - public HashMap<String, Player> remotePlayers = new HashMap<>(); - - - public void setCurrentPlayer(String name, HashMap<String, Trainer> trainers) { - Trainer trainer = trainers.get(name); - Position position = new Position(trainer.getX(), trainer.getY()); - currentPlayer = new Player(name, position); - } - - public void setRemotePlayers(HashMap<String, Trainer> trainers) { - for (Map.Entry<String, Trainer> trainer: trainers.entrySet()) { - if (trainer.getValue().getName().equals(currentPlayer.name)) { - continue; - } - - String name = trainer.getKey(); - Trainer obj = trainer.getValue(); - remotePlayers.put(name, new Player(name, new Position( - obj.getX(), - obj.getY() - ))); - } - } -} diff --git a/api/src/main/java/akkamon/api/models/HeartBeatEvent.java b/api/src/main/java/akkamon/api/models/HeartBeatEvent.java new file mode 100644 index 0000000..1b3dd0e --- /dev/null +++ b/api/src/main/java/akkamon/api/models/HeartBeatEvent.java @@ -0,0 +1,5 @@ +package akkamon.api.models; + +public class HeartBeatEvent extends Event { + public EventType type = EventType.HEART_BEAT; +} diff --git a/api/src/main/java/akkamon/api/models/Player.java b/api/src/main/java/akkamon/api/models/Player.java deleted file mode 100644 index 3aebb4d..0000000 --- a/api/src/main/java/akkamon/api/models/Player.java +++ /dev/null @@ -1,13 +0,0 @@ -package akkamon.api.models; - -import java.util.HashMap; - -public class Player { - public String name; - public Position position; - - public Player(String name, Position position) { - this.name = name; - this.position = position; - } -} diff --git a/api/src/main/java/akkamon/api/models/Position.java b/api/src/main/java/akkamon/api/models/Position.java deleted file mode 100644 index 3dd3402..0000000 --- a/api/src/main/java/akkamon/api/models/Position.java +++ /dev/null @@ -1,11 +0,0 @@ -package akkamon.api.models; - -public class Position { - public float x; - public float y; - - public Position(float x, float y) { - this.x = x; - this.y = y; - } -} diff --git a/api/src/main/java/akkamon/api/models/User.java b/api/src/main/java/akkamon/api/models/User.java deleted file mode 100644 index 5f26ea0..0000000 --- a/api/src/main/java/akkamon/api/models/User.java +++ /dev/null @@ -1,11 +0,0 @@ -package akkamon.api.models; - -public class User { - public String name; - public String password; - - public User(String name, String password) { - this.name = name; - this.password = password; - } -} |
