diff --git a/src/main/java/seng302/gameServer/GameState.java b/src/main/java/seng302/gameServer/GameState.java index 4e58bc50..9a54c7d1 100644 --- a/src/main/java/seng302/gameServer/GameState.java +++ b/src/main/java/seng302/gameServer/GameState.java @@ -7,7 +7,6 @@ import java.util.Map; import seng302.gameServer.server.messages.BoatAction; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import seng302.gameServer.server.messages.BoatActionType; import seng302.model.Player; import seng302.model.Yacht; import seng302.model.mark.MarkOrder; diff --git a/src/main/java/seng302/gameServer/ServerPacketParser.java b/src/main/java/seng302/gameServer/ServerPacketParser.java index 2c7538e4..84f8fd17 100644 --- a/src/main/java/seng302/gameServer/ServerPacketParser.java +++ b/src/main/java/seng302/gameServer/ServerPacketParser.java @@ -10,11 +10,11 @@ import seng302.gameServer.server.messages.BoatAction; public class ServerPacketParser { - public static BoatActionType extractBoatAction(StreamPacket packet) { + public static BoatAction extractBoatAction(StreamPacket packet) { byte[] payload = packet.getPayload(); int messageVersionNo = payload[0]; long actionTypeValue = Message.bytesToLong(Arrays.copyOfRange(payload, 0, 1)); - return BoatActionType.getType((int) actionTypeValue); + return BoatAction.getType((int) actionTypeValue); } public static ClientType extractClientType(StreamPacket packet){ diff --git a/src/main/java/seng302/gameServer/ServerToClientThread.java b/src/main/java/seng302/gameServer/ServerToClientThread.java index c4c9f9b8..2a35e430 100644 --- a/src/main/java/seng302/gameServer/ServerToClientThread.java +++ b/src/main/java/seng302/gameServer/ServerToClientThread.java @@ -1,16 +1,12 @@ package seng302.gameServer; -import seng302.gameServer.server.messages.*; -import seng302.model.Player; -import seng302.model.Yacht; -import seng302.model.stream.packets.PacketType; -import seng302.model.stream.packets.StreamPacket; -import seng302.model.stream.xml.generator.Race; -import seng302.model.stream.xml.generator.Regatta; -import seng302.utilities.XMLGenerator; - -import java.io.*; +import java.io.BufferedReader; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.OutputStream; import java.net.Socket; import java.net.SocketException; import java.time.LocalDateTime; @@ -22,6 +18,19 @@ import java.util.concurrent.ThreadLocalRandom; import java.util.stream.Collectors; import java.util.zip.CRC32; import java.util.zip.Checksum; +import seng302.gameServer.server.messages.BoatAction; +import seng302.gameServer.server.messages.BoatLocationMessage; +import seng302.gameServer.server.messages.BoatStatus; +import seng302.gameServer.server.messages.BoatSubMessage; +import seng302.gameServer.server.messages.ClientType; +import seng302.gameServer.server.messages.Message; +import seng302.gameServer.server.messages.RaceStatus; +import seng302.gameServer.server.messages.RaceStatusMessage; +import seng302.gameServer.server.messages.RaceType; +import seng302.gameServer.server.messages.RegistrationResponseMessage; +import seng302.gameServer.server.messages.RegistrationResponseStatus; +import seng302.gameServer.server.messages.XMLMessage; +import seng302.gameServer.server.messages.XMLMessageSubType; import seng302.model.Player; import seng302.model.Yacht; import seng302.model.stream.packets.PacketType; @@ -29,16 +38,6 @@ import seng302.model.stream.packets.StreamPacket; import seng302.model.stream.xml.generator.Race; import seng302.model.stream.xml.generator.Regatta; import seng302.utilities.XMLGenerator; -import seng302.gameServer.server.messages.BoatAction; -import seng302.gameServer.server.messages.BoatLocationMessage; -import seng302.gameServer.server.messages.BoatStatus; -import seng302.gameServer.server.messages.BoatSubMessage; -import seng302.gameServer.server.messages.Message; -import seng302.gameServer.server.messages.RaceStatus; -import seng302.gameServer.server.messages.RaceStatusMessage; -import seng302.gameServer.server.messages.RaceType; -import seng302.gameServer.server.messages.XMLMessage; -import seng302.gameServer.server.messages.XMLMessageSubType; /** * A class describing a single connection to a Client for the purposes of sending and receiving on @@ -201,7 +200,7 @@ public class ServerToClientThread implements Runnable, Observer { //System.out.println("RECEIVED A PACKET"); switch (PacketType.assignPacketType(type, payload)) { case BOAT_ACTION: - BoatActionType actionType = ServerPacketParser + BoatAction actionType = ServerPacketParser .extractBoatAction( new StreamPacket(type, payloadLength, timeStamp, payload)); GameState.updateBoat(sourceId, actionType); diff --git a/src/main/java/seng302/visualiser/ClientToServerThread.java b/src/main/java/seng302/visualiser/ClientToServerThread.java index cd0f8a90..bda0e6ec 100644 --- a/src/main/java/seng302/visualiser/ClientToServerThread.java +++ b/src/main/java/seng302/visualiser/ClientToServerThread.java @@ -18,9 +18,17 @@ import java.util.zip.Checksum; import javafx.application.Platform; import javafx.scene.control.Alert; import javafx.scene.control.Alert.AlertType; -import seng302.model.stream.packets.StreamPacket; +import javafx.scene.control.ButtonType; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import seng302.gameServer.server.messages.BoatAction; import seng302.gameServer.server.messages.BoatActionMessage; +import seng302.gameServer.server.messages.ClientType; import seng302.gameServer.server.messages.Message; +import seng302.gameServer.server.messages.RegistrationRequestMessage; +import seng302.gameServer.server.messages.RegistrationResponseStatus; +import seng302.model.stream.packets.PacketType; +import seng302.model.stream.packets.StreamPacket; /** * A class describing a single connection to a Server for the purposes of sending and receiving on diff --git a/src/main/java/seng302/visualiser/GameClient.java b/src/main/java/seng302/visualiser/GameClient.java index 5655530d..ef22a45b 100644 --- a/src/main/java/seng302/visualiser/GameClient.java +++ b/src/main/java/seng302/visualiser/GameClient.java @@ -14,8 +14,6 @@ import javafx.scene.input.KeyEvent; import javafx.scene.layout.Pane; import seng302.gameServer.MainServerThread; import seng302.gameServer.server.messages.BoatAction; -import seng302.gameServer.server.messages.BoatActionMessage; -import seng302.gameServer.server.messages.BoatActionType; import seng302.model.RaceState; import seng302.model.Yacht; import seng302.model.stream.packets.StreamPacket; @@ -32,7 +30,8 @@ import seng302.visualiser.controllers.LobbyController.CloseStatus; import seng302.visualiser.controllers.RaceViewController; /** - * Created by cir27 on 20/07/17. + * This class is a client side instance of a yacht racing game in JavaFX. The game is instantiated + * with a JavaFX Pane to insert itself into. */ public class GameClient { @@ -49,10 +48,20 @@ public class GameClient { private ObservableList clientLobbyList = FXCollections.observableArrayList(); + /** + * Create an instance of the game client. Does not do anything untill run with runAsClient() + * runAsHost(). + * @param holder The JavaFX Pane that the visual elements for the race will be inserted into. + */ public GameClient(Pane holder) { this.holderPane = holder; } + /** + * Connect to a game at the given address and starts the visualiser. + * @param ipAddress IP to connect to. + * @param portNumber Port to connect to. + */ public void runAsClient(String ipAddress, Integer portNumber) { try { socketThread = new ClientToServerThread(ipAddress, portNumber); @@ -69,6 +78,11 @@ public class GameClient { lobbyController.addCloseListener((exitCause) -> this.loadStartScreen()); } + /** + * Connect to a game as the host at the given address and starts the visualiser. + * @param ipAddress IP to connect to. + * @param portNumber Port to connect to. + */ public void runAsHost(String ipAddress, Integer portNumber) { server = new MainServerThread(); try { diff --git a/src/test/java/seng302/visualiser/ClientToServerTests/RegularPacketsTest.java b/src/test/java/seng302/visualiser/ClientToServerTests/RegularPacketsTest.java index 41583cfe..e8064a6c 100644 --- a/src/test/java/seng302/visualiser/ClientToServerTests/RegularPacketsTest.java +++ b/src/test/java/seng302/visualiser/ClientToServerTests/RegularPacketsTest.java @@ -15,7 +15,6 @@ import seng302.visualiser.ClientToServerThread; /** * Test for checking how regularly packets are sent from ClientToServer Thread. */ -//@FixMethodOrder(MethodSorters.NAME_ASCENDING) public class RegularPacketsTest { private MainServerThread serverThread; @@ -30,7 +29,7 @@ public class RegularPacketsTest { } @Test - public void Test1PacketsSentAtRegularIntervals () throws Exception { + public void packetsSentAtRegularIntervals () throws Exception { final double TEST_DISTANCE = 10.0; serverThread.startGame(); SleepThreadMaxDelay(); @@ -51,7 +50,7 @@ public class RegularPacketsTest { } @Test - public void Test2ArbitraryPacketSentOnRelease() throws Exception { + public void testArbitraryPacketSent() throws Exception { serverThread.startGame(); SleepThreadMaxDelay(); Yacht yacht = new ArrayList<>(GameState.getYachts().values()).get(0); @@ -61,21 +60,6 @@ public class RegularPacketsTest { Assert.assertEquals(startState, !yacht.getSailIn()); } - @Test - public void Test3ArbitraryPacketSentOnPress() throws Exception { - 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); - clientThread.sendBoatAction(BoatAction.TACK_GYBE); - SleepThreadMaxDelay(); - Assert.assertEquals(testYacht.getHeading(), yacht.getHeading(), 1); - } - /** * Give time for processing and packet sending. 200ms listed as absolute maximum for an * acceptable delay. @@ -90,7 +74,7 @@ public class RegularPacketsTest { serverThread.terminate(); clientThread.setSocketToClose(); GameState.setCurrentStage(GameStages.LOBBYING); - SleepThreadMaxDelay(); //Make sure socket is closed. - SleepThreadMaxDelay(); + for (int i = 0; i<6; i++) + SleepThreadMaxDelay(); //Make sure socket is closed. } }