diff --git a/src/main/java/seng302/gameServer/GameState.java b/src/main/java/seng302/gameServer/GameState.java index 9a54c7d1..85f7393c 100644 --- a/src/main/java/seng302/gameServer/GameState.java +++ b/src/main/java/seng302/gameServer/GameState.java @@ -7,6 +7,8 @@ import java.util.Map; import seng302.gameServer.server.messages.BoatAction; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import seng302.gameServer.server.messages.MarkRoundingMessage; +import seng302.gameServer.server.messages.Message; import seng302.model.Player; import seng302.model.Yacht; import seng302.model.mark.MarkOrder; @@ -17,7 +19,13 @@ import seng302.model.mark.MarkOrder; */ public class GameState implements Runnable { - private Logger logger = LoggerFactory.getLogger(MarkOrder.class); + @FunctionalInterface + interface MarkPassingListener { + + void markPassing(Message message); + } + + private Logger logger = LoggerFactory.getLogger(GameState.class); private static Integer STATE_UPDATES_PER_SECOND = 60; public static Integer MAX_PLAYERS = 8; @@ -34,6 +42,8 @@ public class GameState implements Runnable { private static MarkOrder markOrder; private static long startTime; + private static List markListeners; + private static Map playerStringMap = new HashMap<>(); /* Ideally I would like to make this class an object instantiated by the server and given to @@ -53,13 +63,13 @@ public class GameState implements Runnable { yachts = new HashMap<>(); players = new ArrayList<>(); GameState.hostIpAddress = hostIpAddress; - players = new ArrayList<>(); + ; currentStage = GameStages.LOBBYING; isRaceStarted = false; //set this when game stage changes to prerace previousUpdateTime = System.currentTimeMillis(); - yachts = new HashMap<>(); markOrder = new MarkOrder(); //This could be instantiated at some point with a select map? + markListeners = new ArrayList<>(); new Thread(this).start(); //Run the auto updates on the game state } @@ -215,4 +225,12 @@ public class GameState implements Runnable { System.out.println("Lng: " + playerYacht.getLocation().getLng()); System.out.println("-----------------------\n"); } + + public static void addMarkPassListener(MarkPassingListener listener) { + markListeners.add(listener); + } + + public static void removeMarkPassListenr(MarkPassingListener listener) { + markListeners.remove(listener); + } } diff --git a/src/main/java/seng302/gameServer/MainServerThread.java b/src/main/java/seng302/gameServer/MainServerThread.java index 24b94899..306d234a 100644 --- a/src/main/java/seng302/gameServer/MainServerThread.java +++ b/src/main/java/seng302/gameServer/MainServerThread.java @@ -7,6 +7,7 @@ import java.util.ArrayList; import java.util.Observable; import java.util.Timer; import java.util.TimerTask; +import seng302.gameServer.server.messages.Message; import seng302.model.Player; import seng302.model.PolarTable; @@ -88,6 +89,12 @@ public class MainServerThread extends Observable implements Runnable, ClientConn } } + public void broadcastMessage(Message message) { + for (ServerToClientThread serverToClientThread : serverToClientThreads) { + serverToClientThread.sendMessage(message); + } + } + static void serverLog(String message, int logLevel){ if(logLevel <= LOG_LEVEL){ diff --git a/src/main/java/seng302/gameServer/server/messages/MarkRoundingMessage.java b/src/main/java/seng302/gameServer/server/messages/MarkRoundingMessage.java index c2223f5d..7820f49a 100644 --- a/src/main/java/seng302/gameServer/server/messages/MarkRoundingMessage.java +++ b/src/main/java/seng302/gameServer/server/messages/MarkRoundingMessage.java @@ -27,7 +27,7 @@ public class MarkRoundingMessage extends Message{ */ public MarkRoundingMessage(int ackNumber, int raceId, int sourceId, RoundingBoatStatus roundingBoatStatus, RoundingSide roundingSide, MarkType markType, int markId) { - this.time = System.currentTimeMillis() / 1000L; + this.time = System.currentTimeMillis(); this.ackNumber = ackNumber; this.raceId = raceId; this.sourceId = sourceId;