diff --git a/src/main/java/seng302/App.java b/src/main/java/seng302/App.java index 3b914350..8c6f85ac 100644 --- a/src/main/java/seng302/App.java +++ b/src/main/java/seng302/App.java @@ -67,8 +67,6 @@ public class App extends Application { @Override public void start(Stage primaryStage) throws Exception { - PolarTable.parsePolarFile(getClass().getResourceAsStream("/config/acc_polars.csv")); - Parent root = FXMLLoader.load(getClass().getResource("/views/StartScreenView.fxml")); primaryStage.setTitle("RaceVision"); Scene scene = new Scene(root, 1530, 960); diff --git a/src/main/java/seng302/gameServer/GameState.java b/src/main/java/seng302/gameServer/GameState.java index ea8c1004..5a3897d7 100644 --- a/src/main/java/seng302/gameServer/GameState.java +++ b/src/main/java/seng302/gameServer/GameState.java @@ -49,10 +49,8 @@ public class GameState implements Runnable { players = new ArrayList<>(); currentStage = GameStages.LOBBYING; isRaceStarted = false; - yachts = new HashMap<>(); //set this when game stage changes to prerace previousUpdateTime = System.currentTimeMillis(); - yachts = new HashMap<>(); new Thread(this).start(); } @@ -67,7 +65,8 @@ public class GameState implements Runnable { public static void addPlayer(Player player) { players.add(player); - String playerText = player.getYacht().getSourceId() + " " + player.getYacht().getBoatName() + " " + player.getYacht().getCountry(); + String playerText = player.getYacht().getSourceId() + " " + player.getYacht().getBoatName() + + " " + player.getYacht().getCountry(); playerStringMap.put(player, playerText); } diff --git a/src/main/java/seng302/gameServer/HeartbeatThread.java b/src/main/java/seng302/gameServer/HeartbeatThread.java index f15868c3..1534a7e6 100644 --- a/src/main/java/seng302/gameServer/HeartbeatThread.java +++ b/src/main/java/seng302/gameServer/HeartbeatThread.java @@ -42,7 +42,7 @@ public class HeartbeatThread extends Thread{ */ private void sendHeartbeatToAllPlayers(){ Message heartbeat = new Heartbeat(seqNum); - + System.out.println(GameState.getPlayers()); for (Player player : GameState.getPlayers()){ if (!player.getSocket().isConnected()) { playerLostConnection(player); diff --git a/src/main/java/seng302/gameServer/MainServerThread.java b/src/main/java/seng302/gameServer/MainServerThread.java index 6e827d95..1539730e 100644 --- a/src/main/java/seng302/gameServer/MainServerThread.java +++ b/src/main/java/seng302/gameServer/MainServerThread.java @@ -8,6 +8,7 @@ import java.util.Observable; import java.util.Timer; import java.util.TimerTask; import seng302.model.Player; +import seng302.model.PolarTable; /** * A class describing the overall server, which creates and collects server threads for each client @@ -31,7 +32,7 @@ public class MainServerThread extends Observable implements Runnable, ClientConn } catch (IOException e) { serverLog("IO error in server thread handler upon trying to make new server socket", 0); } - + PolarTable.parsePolarFile(getClass().getResourceAsStream("/config/acc_polars.csv")); terminated = false; thread = new Thread(this); thread.start(); diff --git a/src/main/java/seng302/model/PolarTable.java b/src/main/java/seng302/model/PolarTable.java index dee22278..9334cc54 100644 --- a/src/main/java/seng302/model/PolarTable.java +++ b/src/main/java/seng302/model/PolarTable.java @@ -71,8 +71,6 @@ public final class PolarTable { } catch (IOException e) { System.out.println("[PolarTable] IO exception"); } - - } @@ -155,7 +153,6 @@ public final class PolarTable { public static Double getClosestWindSpeedInPolar(Double thisWindSpeed) { Double smallestDif = Double.POSITIVE_INFINITY; Double closestWind = 0d; - for (Double polarWindSpeed : polarTable.keySet()) { Double difference = Math.abs(polarWindSpeed - thisWindSpeed); if (difference < smallestDif) { diff --git a/src/test/java/seng302/visualiser/ClientToServerTests/RegularPacketsTest.java b/src/test/java/seng302/visualiser/ClientToServerTests/RegularPacketsTest.java index 9e5aa7f0..94ba6d39 100644 --- a/src/test/java/seng302/visualiser/ClientToServerTests/RegularPacketsTest.java +++ b/src/test/java/seng302/visualiser/ClientToServerTests/RegularPacketsTest.java @@ -1,24 +1,18 @@ package seng302.visualiser.ClientToServerTests; -import java.lang.reflect.Field; -import javafx.application.Platform; -import javafx.scene.Scene; -import javafx.scene.input.KeyCode; -import javafx.scene.input.KeyEvent; -import javafx.scene.layout.Pane; -import javafx.stage.Stage; +import java.util.ArrayList; +import org.junit.After; import org.junit.Assert; import org.junit.Before; import org.junit.FixMethodOrder; import org.junit.Test; import org.junit.runners.MethodSorters; -import org.testfx.api.FxToolkit; import seng302.gameServer.GameStages; import seng302.gameServer.GameState; import seng302.gameServer.MainServerThread; +import seng302.gameServer.server.messages.BoatActionType; import seng302.model.Yacht; import seng302.visualiser.ClientToServerThread; -import seng302.visualiser.GameClient; /** * Test for checking how regularly packets are sent from ClientToServer Thread. @@ -27,87 +21,59 @@ import seng302.visualiser.GameClient; public class RegularPacketsTest { private MainServerThread serverThread; - private GameClient gameClient; - private Pane pane; - private Scene scene; - private Stage stage; - -// @BeforeClass -// public static void preSetup() throws Exception { -// FxToolkit toolkit = FxToolkit.registerPrimaryStage(); -// } + private ClientToServerThread clientThread; @Before public void setup() throws Exception { - stage = FxToolkit.registerPrimaryStage(); - Platform.runLater(() -> { - pane = new Pane(); - scene = new Scene(pane); - stage.setScene(scene); - }); - while (stage != null && pane != null && scene != null && stage.getScene() != null); - gameClient = new GameClient(pane); - gameClient.runAsHost("localhost", 4942); - Field server = gameClient.getClass().getDeclaredField("server"); - server.setAccessible(true); - serverThread = (MainServerThread) server.get(gameClient); + new GameState("localhost"); + serverThread = new MainServerThread(); + clientThread = new ClientToServerThread("localhost", 4942); GameState.setCurrentStage(GameStages.RACING); - serverThread.startGame(); } @Test public void Test1PacketsSentAtRegularIntervals () throws Exception { - Yacht yacht = GameState.getYachts().get(0); + final double TEST_DISTANCE = 10.0; + serverThread.startGame(); + SleepThreadMaxDelay(); + Yacht yacht = new ArrayList<>(GameState.getYachts().values()).get(0); double startAngle = yacht.getHeading(); - KeyEvent keyPress = new KeyEvent(null, scene, - KeyEvent.KEY_PRESSED, "page_up", "page_up", KeyCode.PAGE_UP, - false, false, false, false - ); - KeyEvent keyRelease = new KeyEvent(null, scene, - KeyEvent.KEY_RELEASED, "page_up", "page_up", KeyCode.PAGE_UP, - false, false, false, false - ); long startTime = System.currentTimeMillis(); - pane.fireEvent(keyPress); - while (yacht.getHeading() - startAngle > 100); - pane.fireEvent(keyRelease); + clientThread.sendBoatEvent(BoatActionType.UPWIND); + Thread.sleep(200); + while (Math.abs(yacht.getHeading() - startAngle) < TEST_DISTANCE) { + //Wait for yacht to move + } + clientThread.sendBoatEvent(BoatActionType.MAINTAIN_HEADING); long endTime = System.currentTimeMillis(); - SleepThreadMaxDelay(); //Allowed to be two loops of delay due to loop delay and processing delay at client + server ends. - Assert.assertEquals(100 / Yacht.TURN_STEP * ClientToServerThread.PACKET_SENDING_INTERVAL_MS, - endTime - startTime / (100 / Yacht.TURN_STEP), 2 * ClientToServerThread.PACKET_SENDING_INTERVAL_MS); + SleepThreadMaxDelay(); + //Allowed to be two loops of delay due to loop delay and processing delay at client + server ends. + Assert.assertEquals(TEST_DISTANCE / Yacht.TURN_STEP * ClientToServerThread.PACKET_SENDING_INTERVAL_MS, + (endTime - startTime), 2 * ClientToServerThread.PACKET_SENDING_INTERVAL_MS); } @Test public void Test2ArbitraryPacketSentOnRelease() throws Exception { - KeyEvent keyPress = new KeyEvent(null, scene, - KeyEvent.KEY_PRESSED, "shift", "shift", KeyCode.SHIFT, - false, false, false, false - ); - KeyEvent keyRelease = new KeyEvent(null, scene, - KeyEvent.KEY_RELEASED, "shift", "shift", KeyCode.SHIFT, - false, false, false, false - ); - Yacht yacht = GameState.getYachts().get(0); + serverThread.startGame(); + SleepThreadMaxDelay(); + Yacht yacht = new ArrayList<>(GameState.getYachts().values()).get(0); boolean startState = yacht.getSailIn(); - pane.fireEvent(keyPress); - pane.fireEvent(keyRelease); + clientThread.sendBoatEvent(BoatActionType.SAILS_IN); SleepThreadMaxDelay(); Assert.assertEquals(startState, !yacht.getSailIn()); } @Test public void Test3ArbitraryPacketSentOnPress() throws Exception { - KeyEvent keyPress = new KeyEvent(null, scene, - KeyEvent.KEY_PRESSED, "space", "space", KeyCode.SPACE, - false, false, false, false - ); - Yacht yacht = GameState.getYachts().get(0); + serverThread.startGame(); + SleepThreadMaxDelay(); + Yacht yacht = new ArrayList<>(GameState.getYachts().values()).get(0); double heading = yacht.getHeading(); double windDirection = GameState.getWindDirection(); Yacht testYacht = new Yacht("", 0, "", "", "", ""); testYacht.setHeading(heading); testYacht.tackGybe(windDirection); - pane.fireEvent(keyPress); + clientThread.sendBoatEvent(BoatActionType.TACK_GYBE); SleepThreadMaxDelay(); Assert.assertEquals(testYacht.getHeading(), yacht.getHeading(), 1); } @@ -120,4 +86,11 @@ public class RegularPacketsTest { private void SleepThreadMaxDelay() throws Exception { Thread.sleep(200); } + + @After + public void teardown () { + serverThread.terminate(); + clientThread.setSocketToClose(); + GameState.setCurrentStage(GameStages.LOBBYING); + } }