From b9ae9c4730efa342670ee1deb3d5db73a652585c Mon Sep 17 00:00:00 2001 From: Peter Galloway Date: Mon, 14 Aug 2017 17:55:53 +1200 Subject: [PATCH] made server send appropriate racestatus flags in the race status packet #pair[mra106, ptg19] #story[1109] --- .../java/seng302/gameServer/GameState.java | 5 +++- .../gameServer/ServerToClientThread.java | 27 +++++++++++++++---- .../java/seng302/utilities/StreamParser.java | 1 + 3 files changed, 27 insertions(+), 6 deletions(-) diff --git a/src/main/java/seng302/gameServer/GameState.java b/src/main/java/seng302/gameServer/GameState.java index 2d70aecd..31d001ad 100644 --- a/src/main/java/seng302/gameServer/GameState.java +++ b/src/main/java/seng302/gameServer/GameState.java @@ -62,7 +62,7 @@ public class GameState implements Runnable { yachts = new HashMap<>(); markOrder = new MarkOrder(); //This could be instantiated at some point with a select map? - startTime = System.currentTimeMillis() + 20000; + startTime = System.currentTimeMillis() + 60000; new Thread(this).start(); //Run the auto updates on the game state } @@ -166,6 +166,9 @@ public class GameState implements Runnable { public void update() { Long timeInterval = System.currentTimeMillis() - previousUpdateTime; previousUpdateTime = System.currentTimeMillis(); + if (System.currentTimeMillis() > startTime) { + GameState.setCurrentStage(GameStages.RACING); + } for (Yacht yacht : yachts.values()) { yacht.update(timeInterval); } diff --git a/src/main/java/seng302/gameServer/ServerToClientThread.java b/src/main/java/seng302/gameServer/ServerToClientThread.java index b9aeddfe..cc7b2026 100644 --- a/src/main/java/seng302/gameServer/ServerToClientThread.java +++ b/src/main/java/seng302/gameServer/ServerToClientThread.java @@ -59,6 +59,11 @@ public class ServerToClientThread implements Runnable, Observer { private XMLGenerator xml; + private static final int PRESTART_TIME = 60 * -1000; + private static final int WARNING_TIME = 30 * -1000; + private static final int PREPATORY_TIME = 10 * -1000; + + public ServerToClientThread(Socket socket) { this.socket = socket; seqNo = 0; @@ -211,8 +216,6 @@ public class ServerToClientThread implements Runnable, Observer { } } } catch (Exception e) { - // TODO: 24/07/17 zyt10 - fix a logic here when a client disconnected -// serverLog("ERROR OCCURRED, CLOSING SERVER CONNECTION: " + socket.getRemoteSocketAddress().toString(), 1); closeSocket(); return; } @@ -368,12 +371,26 @@ public class ServerToClientThread implements Runnable, Observer { boatSubMessages.add(m); } - if (GameState.getCurrentStage() == GameStages.RACING) { - raceStatus = RaceStatus.STARTED; + long timeTillStart = System.currentTimeMillis() - GameState.getStartTime(); + + if (GameState.getCurrentStage() == GameStages.LOBBYING) { + raceStatus = RaceStatus.PRESTART; + } else if (GameState.getCurrentStage() == GameStages.PRE_RACE) { + raceStatus = RaceStatus.PRESTART; + + if (timeTillStart > WARNING_TIME) { + raceStatus = RaceStatus.WARNING; + } + + if (timeTillStart > PREPATORY_TIME) { + raceStatus = RaceStatus.PREPARATORY; + } } else { - raceStatus = RaceStatus.WARNING; + raceStatus = RaceStatus.STARTED; } + System.out.println("raceStatus.ger = " + raceStatus.getCode()); + sendMessage(new RaceStatusMessage(1, raceStatus, GameState.getStartTime(), GameState.getWindDirection(), GameState.getWindSpeedMMS().longValue(), GameState.getPlayers().size(), RaceType.MATCH_RACE, 1, boatSubMessages)); diff --git a/src/main/java/seng302/utilities/StreamParser.java b/src/main/java/seng302/utilities/StreamParser.java index 0f4c48c0..26fccd9d 100644 --- a/src/main/java/seng302/utilities/StreamParser.java +++ b/src/main/java/seng302/utilities/StreamParser.java @@ -59,6 +59,7 @@ public class StreamParser { long currentTime = bytesToLong(Arrays.copyOfRange(payload, 1, 7)); long raceId = bytesToLong(Arrays.copyOfRange(payload, 7, 11)); int raceStatus = payload[11]; + System.out.println(raceStatus); long expectedStartTime = bytesToLong(Arrays.copyOfRange(payload,12,18)); long windDir = bytesToLong(Arrays.copyOfRange(payload,18,20)); long rawWindSpeed = bytesToLong(Arrays.copyOfRange(payload,20,22));