From 881f7f8e30ac8a9a654867f8b67fbe3dac3ae3d8 Mon Sep 17 00:00:00 2001 From: Calum Date: Fri, 21 Jul 2017 09:22:55 +1200 Subject: [PATCH] Changed package heirachy. Merged Controller and StartScreenController. #refactor --- src/main/java/seng302/App.java | 12 +- src/main/java/seng302/client/GameView.java | 10 -- .../java/seng302/controllers/Controller.java | 91 ------------ .../gameServer/ClientConnectionDelegate.java | 2 +- .../java/seng302/gameServer/GameState.java | 2 +- .../seng302/gameServer/HeartbeatThread.java | 2 +- .../seng302/gameServer/MainServerThread.java | 8 +- .../gameServer/ServerListenThread.java | 4 - .../gameServer/ServerToClientThread.java | 8 +- .../seng302/{models => model}/Colors.java | 2 +- .../seng302/{models => model}/Player.java | 6 +- .../seng302/{models => model}/PolarTable.java | 2 +- .../java/seng302/{models => model}/Yacht.java | 6 +- .../{models => model}/map/Boundary.java | 2 +- .../{models => model}/map/CanvasMap.java | 2 +- .../map/MercatorProjection.java | 2 +- .../map/TestMapController.java | 2 +- .../{models => model}/mark/GateMark.java | 2 +- .../seng302/{models => model}/mark/Mark.java | 2 +- .../{models => model}/mark/MarkType.java | 2 +- .../{models => model}/mark/SingleMark.java | 2 +- .../stream/PacketBufferDelegate.java | 4 +- .../stream/StreamParser.java | 23 ++- .../stream/StreamReceiver.java | 12 +- .../{models => model}/stream/XMLParser.java | 12 +- .../stream/packets/BoatPositionPacket.java | 2 +- .../stream/packets/PacketType.java | 4 +- .../stream/packets/StreamPacket.java | 2 +- .../ClientToServerThread.java | 46 +++--- .../GameView.java} | 137 ++++++++---------- .../FinishScreenViewController.java | 8 +- .../controllers/LobbyController.java | 2 +- .../controllers/RaceViewController.java | 31 ++-- .../controllers/StartScreenController.java | 14 +- .../controllers/annotations/Annotation.java | 2 +- .../ImportantAnnotationController.java | 2 +- .../ImportantAnnotationDelegate.java | 2 +- .../ImportantAnnotationsState.java | 2 +- .../controllers/client/ClientController.java | 120 +++++++++++++++ .../controllers/host/HostController.java | 13 ++ .../fxObjects/BoatAnnotations.java | 6 +- .../{ => visualiser}/fxObjects/BoatGroup.java | 14 +- .../{ => visualiser}/fxObjects/MarkGroup.java | 10 +- .../{ => visualiser}/fxObjects/Wake.java | 3 +- .../resources/views/FinishScreenView.fxml | 2 +- src/main/resources/views/GameView.fxml | 2 +- src/main/resources/views/HostLobbyView.fxml | 67 +++++++++ src/main/resources/views/LobbyView.fxml | 2 +- src/main/resources/views/MainView.fxml | 6 - src/main/resources/views/RaceView.fxml | 2 +- src/main/resources/views/StartScreenView.fxml | 2 +- src/main/resources/views/TestMapView.fxml | 2 +- src/test/java/seng302/BoatTest.java | 2 +- src/test/java/seng302/ColorsTest.java | 2 +- src/test/java/seng302/TestRaceTimer.java | 2 +- .../map/MercatorProjectionTest.java | 4 +- .../{models => model}/mark/MarkTest.java | 2 +- .../stream/StreamReceiverTest.java | 4 +- .../java/seng302/models/BoatGroupTest.java | 95 ------------ .../java/seng302/models/MarkGroupTest.java | 90 ------------ .../models/stream/TeamsParserTest.java | 36 ----- .../TestImportantAnnotationState.java | 4 +- 62 files changed, 399 insertions(+), 569 deletions(-) delete mode 100644 src/main/java/seng302/client/GameView.java delete mode 100644 src/main/java/seng302/controllers/Controller.java rename src/main/java/seng302/{models => model}/Colors.java (93%) rename src/main/java/seng302/{models => model}/Player.java (90%) rename src/main/java/seng302/{models => model}/PolarTable.java (99%) rename src/main/java/seng302/{models => model}/Yacht.java (97%) rename src/main/java/seng302/{models => model}/map/Boundary.java (96%) rename src/main/java/seng302/{models => model}/map/CanvasMap.java (99%) rename src/main/java/seng302/{models => model}/map/MercatorProjection.java (98%) rename src/main/java/seng302/{models => model}/map/TestMapController.java (95%) rename src/main/java/seng302/{models => model}/mark/GateMark.java (97%) rename src/main/java/seng302/{models => model}/mark/Mark.java (99%) rename src/main/java/seng302/{models => model}/mark/MarkType.java (82%) rename src/main/java/seng302/{models => model}/mark/SingleMark.java (96%) rename src/main/java/seng302/{models => model}/stream/PacketBufferDelegate.java (53%) rename src/main/java/seng302/{models => model}/stream/StreamParser.java (98%) rename src/main/java/seng302/{models => model}/stream/StreamReceiver.java (92%) rename src/main/java/seng302/{models => model}/stream/XMLParser.java (98%) rename src/main/java/seng302/{models => model}/stream/packets/BoatPositionPacket.java (95%) rename src/main/java/seng302/{models => model}/stream/packets/PacketType.java (94%) rename src/main/java/seng302/{models => model}/stream/packets/StreamPacket.java (95%) rename src/main/java/seng302/{client => visualiser}/ClientToServerThread.java (73%) rename src/main/java/seng302/{controllers/GameViewController.java => visualiser/GameView.java} (86%) rename src/main/java/seng302/{ => visualiser}/controllers/FinishScreenViewController.java (94%) rename src/main/java/seng302/{ => visualiser}/controllers/LobbyController.java (98%) rename src/main/java/seng302/{ => visualiser}/controllers/RaceViewController.java (96%) rename src/main/java/seng302/{ => visualiser}/controllers/StartScreenController.java (87%) rename src/main/java/seng302/{ => visualiser}/controllers/annotations/Annotation.java (75%) rename src/main/java/seng302/{ => visualiser}/controllers/annotations/ImportantAnnotationController.java (98%) rename src/main/java/seng302/{ => visualiser}/controllers/annotations/ImportantAnnotationDelegate.java (90%) rename src/main/java/seng302/{ => visualiser}/controllers/annotations/ImportantAnnotationsState.java (96%) create mode 100644 src/main/java/seng302/visualiser/controllers/client/ClientController.java create mode 100644 src/main/java/seng302/visualiser/controllers/host/HostController.java rename src/main/java/seng302/{ => visualiser}/fxObjects/BoatAnnotations.java (97%) rename src/main/java/seng302/{ => visualiser}/fxObjects/BoatGroup.java (97%) rename src/main/java/seng302/{ => visualiser}/fxObjects/MarkGroup.java (96%) rename src/main/java/seng302/{ => visualiser}/fxObjects/Wake.java (98%) create mode 100644 src/main/resources/views/HostLobbyView.fxml delete mode 100644 src/main/resources/views/MainView.fxml rename src/test/java/seng302/{models => model}/map/MercatorProjectionTest.java (96%) rename src/test/java/seng302/{models => model}/mark/MarkTest.java (98%) rename src/test/java/seng302/{models => model}/stream/StreamReceiverTest.java (98%) delete mode 100644 src/test/java/seng302/models/BoatGroupTest.java delete mode 100644 src/test/java/seng302/models/MarkGroupTest.java delete mode 100644 src/test/java/seng302/models/stream/TeamsParserTest.java diff --git a/src/main/java/seng302/App.java b/src/main/java/seng302/App.java index aa0286f4..96e7c052 100644 --- a/src/main/java/seng302/App.java +++ b/src/main/java/seng302/App.java @@ -6,9 +6,9 @@ import javafx.scene.Parent; import javafx.scene.Scene; import javafx.scene.image.Image; import javafx.stage.Stage; -import seng302.models.PolarTable; -import seng302.models.stream.StreamParser; -import seng302.models.stream.StreamReceiver; +import seng302.model.PolarTable; +import seng302.model.stream.StreamParser; +import seng302.model.stream.StreamReceiver; public class App extends Application { @@ -16,11 +16,11 @@ public class App extends Application { public void start(Stage primaryStage) throws Exception { PolarTable.parsePolarFile(getClass().getResourceAsStream("/config/acc_polars.csv")); - Parent root = FXMLLoader.load(getClass().getResource("/views/MainView.fxml")); + Parent root = FXMLLoader.load(getClass().getResource("/views/StartScreenView.fxml")); primaryStage.setTitle("RaceVision"); primaryStage.setScene(new Scene(root, 1530, 960)); - primaryStage.setMaxWidth(1530); - primaryStage.setMaxHeight(960); +// primaryStage.setMaxWidth(1530); +// primaryStage.setMaxHeight(960); primaryStage.getIcons().add(new Image(getClass().getResourceAsStream("/PP.png"))); // primaryStage.setMaximized(true); diff --git a/src/main/java/seng302/client/GameView.java b/src/main/java/seng302/client/GameView.java deleted file mode 100644 index cc9c5922..00000000 --- a/src/main/java/seng302/client/GameView.java +++ /dev/null @@ -1,10 +0,0 @@ -package seng302.client; - -import javafx.scene.layout.AnchorPane; - -/** - * Created by cir27 on 20/07/17. - */ -public class GameView extends AnchorPane { - -} diff --git a/src/main/java/seng302/controllers/Controller.java b/src/main/java/seng302/controllers/Controller.java deleted file mode 100644 index 24d433c9..00000000 --- a/src/main/java/seng302/controllers/Controller.java +++ /dev/null @@ -1,91 +0,0 @@ -package seng302.controllers; - -import java.io.IOException; -import java.net.URL; -import java.util.ResourceBundle; -import javafx.fxml.FXML; -import javafx.fxml.FXMLLoader; -import javafx.fxml.Initializable; -import javafx.scene.Parent; -import javafx.scene.input.KeyEvent; -import javafx.scene.layout.AnchorPane; -import seng302.models.stream.StreamParser; -import seng302.client.ClientToServerThread; -import seng302.server.messages.BoatActionMessage; -import seng302.server.messages.BoatActionType; - -public class Controller implements Initializable { - - @FXML - private AnchorPane contentPane; - private ClientToServerThread clientToServerThread; - - private Object setContentPane(String jfxUrl) { - try { - contentPane.getChildren().removeAll(); - contentPane.getChildren().clear(); - contentPane.getStylesheets().add(getClass().getResource("/css/master.css").toString()); - FXMLLoader fxmlLoader = new FXMLLoader((getClass().getResource(jfxUrl))); - Parent view = fxmlLoader.load(); - contentPane.getChildren().addAll(view); - return fxmlLoader.getController(); - } catch (javafx.fxml.LoadException e) { - System.err.println(e.getCause()); - } catch (IOException e) { - System.err.println(e); - } - return null; - } - - @Override - public void initialize(URL location, ResourceBundle resources) { - contentPane.getStylesheets().add(getClass().getResource("/css/master.css").toString()); - StartScreenController startScreenController = (StartScreenController) setContentPane("/views/StartScreenView.fxml"); - startScreenController.setController(this); - StreamParser.boatLocations.clear(); - } - - /** Handle the key-pressed event from the text field. */ - public void keyPressed(KeyEvent e) { - BoatActionMessage boatActionMessage; - switch (e.getCode()){ - case SPACE: // align with vmg - boatActionMessage = new BoatActionMessage(BoatActionType.VMG); - clientToServerThread.sendBoatActionMessage(boatActionMessage); - break; - case PAGE_UP: // upwind - boatActionMessage = new BoatActionMessage(BoatActionType.UPWIND); - clientToServerThread.sendBoatActionMessage(boatActionMessage); - break; - case PAGE_DOWN: // downwind - boatActionMessage = new BoatActionMessage(BoatActionType.DOWNWIND); - clientToServerThread.sendBoatActionMessage(boatActionMessage); - break; - case ENTER: // tack/gybe - boatActionMessage = new BoatActionMessage(BoatActionType.TACK_GYBE); - clientToServerThread.sendBoatActionMessage(boatActionMessage); - break; - //TODO Allow a zoom in and zoom out methods - case Z: // zoom in - System.out.println("Zoom in"); - break; - case X: // zoom out - System.out.println("Zoom out"); - break; - } - } - - public void keyReleased(KeyEvent e) { - switch (e.getCode()) { - //TODO 12/07/17 Determine the sail state and send the appropriate packet (eg. if sails are in, send a sail out packet) - case SHIFT: // sails in/sails out - BoatActionMessage boatActionMessage = new BoatActionMessage(BoatActionType.SAILS_IN); - clientToServerThread.sendBoatActionMessage(boatActionMessage); - break; - } - } - - public void setClientToServerThread(ClientToServerThread ctt) { - clientToServerThread = ctt; - } -} diff --git a/src/main/java/seng302/gameServer/ClientConnectionDelegate.java b/src/main/java/seng302/gameServer/ClientConnectionDelegate.java index fab71cd7..e44029c0 100644 --- a/src/main/java/seng302/gameServer/ClientConnectionDelegate.java +++ b/src/main/java/seng302/gameServer/ClientConnectionDelegate.java @@ -1,6 +1,6 @@ package seng302.gameServer; -import seng302.models.Player; +import seng302.model.Player; public interface ClientConnectionDelegate { /** diff --git a/src/main/java/seng302/gameServer/GameState.java b/src/main/java/seng302/gameServer/GameState.java index d36968fc..fcae2838 100644 --- a/src/main/java/seng302/gameServer/GameState.java +++ b/src/main/java/seng302/gameServer/GameState.java @@ -1,6 +1,6 @@ package seng302.gameServer; -import seng302.models.Player; +import seng302.model.Player; import java.util.ArrayList; diff --git a/src/main/java/seng302/gameServer/HeartbeatThread.java b/src/main/java/seng302/gameServer/HeartbeatThread.java index 837677bd..2057b1bd 100644 --- a/src/main/java/seng302/gameServer/HeartbeatThread.java +++ b/src/main/java/seng302/gameServer/HeartbeatThread.java @@ -1,6 +1,6 @@ package seng302.gameServer; -import seng302.models.Player; +import seng302.model.Player; import seng302.server.messages.Heartbeat; import seng302.server.messages.Message; diff --git a/src/main/java/seng302/gameServer/MainServerThread.java b/src/main/java/seng302/gameServer/MainServerThread.java index 8caf5e9c..c765d05b 100644 --- a/src/main/java/seng302/gameServer/MainServerThread.java +++ b/src/main/java/seng302/gameServer/MainServerThread.java @@ -1,9 +1,9 @@ package seng302.gameServer; -import seng302.models.Player; -import seng302.models.stream.PacketBufferDelegate; -import seng302.models.stream.StreamParser; -import seng302.models.stream.packets.StreamPacket; +import seng302.model.Player; +import seng302.model.stream.PacketBufferDelegate; +import seng302.model.stream.StreamParser; +import seng302.model.stream.packets.StreamPacket; import java.io.IOException; import java.net.ServerSocket; diff --git a/src/main/java/seng302/gameServer/ServerListenThread.java b/src/main/java/seng302/gameServer/ServerListenThread.java index b734ab8c..123e1c53 100644 --- a/src/main/java/seng302/gameServer/ServerListenThread.java +++ b/src/main/java/seng302/gameServer/ServerListenThread.java @@ -1,12 +1,8 @@ package seng302.gameServer; -import seng302.models.Player; - import java.io.IOException; import java.net.ServerSocket; import java.net.Socket; -import java.nio.channels.ServerSocketChannel; -import java.nio.channels.SocketChannel; /** * A class for a thread to listen to connections diff --git a/src/main/java/seng302/gameServer/ServerToClientThread.java b/src/main/java/seng302/gameServer/ServerToClientThread.java index 7198875c..e317d375 100644 --- a/src/main/java/seng302/gameServer/ServerToClientThread.java +++ b/src/main/java/seng302/gameServer/ServerToClientThread.java @@ -1,10 +1,8 @@ package seng302.gameServer; -import seng302.gameServer.GameState; -import seng302.models.Player; -import seng302.models.stream.PacketBufferDelegate; -import seng302.models.stream.StreamParser; -import seng302.models.stream.packets.StreamPacket; +import seng302.model.Player; +import seng302.model.stream.StreamParser; +import seng302.model.stream.packets.StreamPacket; import seng302.server.messages.Message; import java.io.*; diff --git a/src/main/java/seng302/models/Colors.java b/src/main/java/seng302/model/Colors.java similarity index 93% rename from src/main/java/seng302/models/Colors.java rename to src/main/java/seng302/model/Colors.java index 0078e505..cde98a39 100644 --- a/src/main/java/seng302/models/Colors.java +++ b/src/main/java/seng302/model/Colors.java @@ -1,4 +1,4 @@ -package seng302.models; +package seng302.model; import javafx.scene.paint.Color; diff --git a/src/main/java/seng302/models/Player.java b/src/main/java/seng302/model/Player.java similarity index 90% rename from src/main/java/seng302/models/Player.java rename to src/main/java/seng302/model/Player.java index 5ea32a4e..ed8145bb 100644 --- a/src/main/java/seng302/models/Player.java +++ b/src/main/java/seng302/model/Player.java @@ -1,10 +1,6 @@ -package seng302.models; +package seng302.model; -import javafx.scene.paint.Color; - -import java.io.IOException; import java.net.Socket; -import java.nio.channels.SocketChannel; /** * A Class defining a player and their respective details in the game as held by the model diff --git a/src/main/java/seng302/models/PolarTable.java b/src/main/java/seng302/model/PolarTable.java similarity index 99% rename from src/main/java/seng302/models/PolarTable.java rename to src/main/java/seng302/model/PolarTable.java index b40b54dd..e24de7e3 100644 --- a/src/main/java/seng302/models/PolarTable.java +++ b/src/main/java/seng302/model/PolarTable.java @@ -1,4 +1,4 @@ -package seng302.models; +package seng302.model; import java.io.*; import java.util.ArrayList; diff --git a/src/main/java/seng302/models/Yacht.java b/src/main/java/seng302/model/Yacht.java similarity index 97% rename from src/main/java/seng302/models/Yacht.java rename to src/main/java/seng302/model/Yacht.java index 7ea7e97e..cfe82a84 100644 --- a/src/main/java/seng302/models/Yacht.java +++ b/src/main/java/seng302/model/Yacht.java @@ -1,8 +1,8 @@ -package seng302.models; +package seng302.model; import javafx.scene.paint.Color; -import seng302.models.mark.Mark; -import seng302.controllers.RaceViewController; +import seng302.model.mark.Mark; +import seng302.visualiser.controllers.RaceViewController; import java.text.DateFormat; import java.text.SimpleDateFormat; diff --git a/src/main/java/seng302/models/map/Boundary.java b/src/main/java/seng302/model/map/Boundary.java similarity index 96% rename from src/main/java/seng302/models/map/Boundary.java rename to src/main/java/seng302/model/map/Boundary.java index 4396d95d..ab2f1f41 100644 --- a/src/main/java/seng302/models/map/Boundary.java +++ b/src/main/java/seng302/model/map/Boundary.java @@ -1,4 +1,4 @@ -package seng302.models.map; +package seng302.model.map; /** * The Boundary class represents a rectangle territorial boundary on a map. It diff --git a/src/main/java/seng302/models/map/CanvasMap.java b/src/main/java/seng302/model/map/CanvasMap.java similarity index 99% rename from src/main/java/seng302/models/map/CanvasMap.java rename to src/main/java/seng302/model/map/CanvasMap.java index ade3e3da..b3e8ed1f 100644 --- a/src/main/java/seng302/models/map/CanvasMap.java +++ b/src/main/java/seng302/model/map/CanvasMap.java @@ -1,4 +1,4 @@ -package seng302.models.map; +package seng302.model.map; import javafx.geometry.Point2D; import javafx.scene.image.Image; diff --git a/src/main/java/seng302/models/map/MercatorProjection.java b/src/main/java/seng302/model/map/MercatorProjection.java similarity index 98% rename from src/main/java/seng302/models/map/MercatorProjection.java rename to src/main/java/seng302/model/map/MercatorProjection.java index 732bc3ee..031a5949 100644 --- a/src/main/java/seng302/models/map/MercatorProjection.java +++ b/src/main/java/seng302/model/map/MercatorProjection.java @@ -1,4 +1,4 @@ -package seng302.models.map; +package seng302.model.map; import javafx.geometry.Point2D; import seng302.utilities.GeoPoint; diff --git a/src/main/java/seng302/models/map/TestMapController.java b/src/main/java/seng302/model/map/TestMapController.java similarity index 95% rename from src/main/java/seng302/models/map/TestMapController.java rename to src/main/java/seng302/model/map/TestMapController.java index fc319bcc..18609275 100644 --- a/src/main/java/seng302/models/map/TestMapController.java +++ b/src/main/java/seng302/model/map/TestMapController.java @@ -1,4 +1,4 @@ -package seng302.models.map; +package seng302.model.map; import javafx.fxml.FXML; import javafx.fxml.Initializable; diff --git a/src/main/java/seng302/models/mark/GateMark.java b/src/main/java/seng302/model/mark/GateMark.java similarity index 97% rename from src/main/java/seng302/models/mark/GateMark.java rename to src/main/java/seng302/model/mark/GateMark.java index 8459b882..896fbd66 100644 --- a/src/main/java/seng302/models/mark/GateMark.java +++ b/src/main/java/seng302/model/mark/GateMark.java @@ -1,4 +1,4 @@ -package seng302.models.mark; +package seng302.model.mark; /** * To represent a gate mark which contains two single marks. diff --git a/src/main/java/seng302/models/mark/Mark.java b/src/main/java/seng302/model/mark/Mark.java similarity index 99% rename from src/main/java/seng302/models/mark/Mark.java rename to src/main/java/seng302/model/mark/Mark.java index 027bf6d3..78be9257 100644 --- a/src/main/java/seng302/models/mark/Mark.java +++ b/src/main/java/seng302/model/mark/Mark.java @@ -1,4 +1,4 @@ -package seng302.models.mark; +package seng302.model.mark; /** * An abstract class to represent general marks diff --git a/src/main/java/seng302/models/mark/MarkType.java b/src/main/java/seng302/model/mark/MarkType.java similarity index 82% rename from src/main/java/seng302/models/mark/MarkType.java rename to src/main/java/seng302/model/mark/MarkType.java index 92b3c93b..c1d6bc6d 100644 --- a/src/main/java/seng302/models/mark/MarkType.java +++ b/src/main/java/seng302/model/mark/MarkType.java @@ -1,4 +1,4 @@ -package seng302.models.mark; +package seng302.model.mark; /** * To represent two types of mark diff --git a/src/main/java/seng302/models/mark/SingleMark.java b/src/main/java/seng302/model/mark/SingleMark.java similarity index 96% rename from src/main/java/seng302/models/mark/SingleMark.java rename to src/main/java/seng302/model/mark/SingleMark.java index 56ba9dc6..f7c57dbb 100644 --- a/src/main/java/seng302/models/mark/SingleMark.java +++ b/src/main/java/seng302/model/mark/SingleMark.java @@ -1,4 +1,4 @@ -package seng302.models.mark; +package seng302.model.mark; /** * Represents the marker as a single mark diff --git a/src/main/java/seng302/models/stream/PacketBufferDelegate.java b/src/main/java/seng302/model/stream/PacketBufferDelegate.java similarity index 53% rename from src/main/java/seng302/models/stream/PacketBufferDelegate.java rename to src/main/java/seng302/model/stream/PacketBufferDelegate.java index 847b0de5..87c16d64 100644 --- a/src/main/java/seng302/models/stream/PacketBufferDelegate.java +++ b/src/main/java/seng302/model/stream/PacketBufferDelegate.java @@ -1,6 +1,6 @@ -package seng302.models.stream; +package seng302.model.stream; -import seng302.models.stream.packets.StreamPacket; +import seng302.model.stream.packets.StreamPacket; public interface PacketBufferDelegate { boolean addToBuffer(StreamPacket streamPacket); diff --git a/src/main/java/seng302/models/stream/StreamParser.java b/src/main/java/seng302/model/stream/StreamParser.java similarity index 98% rename from src/main/java/seng302/models/stream/StreamParser.java rename to src/main/java/seng302/model/stream/StreamParser.java index f1ea501a..056b8ec8 100644 --- a/src/main/java/seng302/models/stream/StreamParser.java +++ b/src/main/java/seng302/model/stream/StreamParser.java @@ -1,4 +1,4 @@ -package seng302.models.stream; +package seng302.model.stream; import java.io.IOException; @@ -9,6 +9,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.Comparator; import java.util.Date; +import java.util.List; import java.util.Map; import java.util.TimeZone; import java.util.concurrent.ConcurrentHashMap; @@ -20,10 +21,10 @@ import javax.xml.parsers.ParserConfigurationException; import org.w3c.dom.Document; import org.xml.sax.InputSource; import org.xml.sax.SAXException; -import seng302.models.Yacht; -import seng302.models.mark.Mark; -import seng302.models.stream.packets.BoatPositionPacket; -import seng302.models.stream.packets.StreamPacket; +import seng302.model.Yacht; +import seng302.model.mark.Mark; +import seng302.model.stream.packets.BoatPositionPacket; +import seng302.model.stream.packets.StreamPacket; /** * The purpose of this class is to take in the stream of divided packets so they can be read @@ -35,8 +36,6 @@ public class StreamParser{ public static ConcurrentHashMap> markLocations = new ConcurrentHashMap<>(); public static ConcurrentHashMap> boatLocations = new ConcurrentHashMap<>(); - private String threadName; - private Thread t; private static boolean newRaceXmlReceived = false; private static boolean raceStarted = false; private static XMLParser xmlObject; @@ -49,7 +48,6 @@ public class StreamParser{ private static Double windSpeed = 0d; private static Long currentTimeLong; private static String currentTimeString; - private static boolean appRunning; //CONVERSION CONSTANTS @@ -436,6 +434,8 @@ public class StreamParser{ boats.get((int)subjectId).setLastMarkRounded(mark); } } + + Long[] array = new Long[]{subjectId, timeStamp, (long) markId}; } /** @@ -448,7 +448,7 @@ public class StreamParser{ int messageVersionNo = payload[0]; int selectedWindId = payload[1]; int loopCount = payload[2]; - ArrayList windInfo = new ArrayList<>(); + List windInfo = new ArrayList<>(); for (int i = 0; i < loopCount; i++) { String wind = "WindId: " + payload[3 + (20 * i)]; wind += @@ -507,7 +507,6 @@ public class StreamParser{ } else if (actionType == 6) { System.out.println("DOWNWIND"); } - } /** @@ -630,10 +629,6 @@ public class StreamParser{ return currentTimeLong; } - public static void appClose() { - appRunning = false; - } - /** * Used to check if a new un-processed xml has been found, if so will return true before * toggling off so that the next check will return false. diff --git a/src/main/java/seng302/models/stream/StreamReceiver.java b/src/main/java/seng302/model/stream/StreamReceiver.java similarity index 92% rename from src/main/java/seng302/models/stream/StreamReceiver.java rename to src/main/java/seng302/model/stream/StreamReceiver.java index 8763a1e4..b455cdf0 100644 --- a/src/main/java/seng302/models/stream/StreamReceiver.java +++ b/src/main/java/seng302/model/stream/StreamReceiver.java @@ -1,19 +1,11 @@ -package seng302.models.stream; +package seng302.model.stream; -import seng302.models.stream.packets.StreamPacket; -import seng302.server.messages.BoatActionMessage; -import seng302.server.messages.BoatActionType; -import seng302.server.messages.Heartbeat; -import seng302.server.messages.Message; +import seng302.model.stream.packets.StreamPacket; import java.io.*; import java.net.Socket; -import java.nio.ByteBuffer; -import java.nio.channels.SocketChannel; import java.util.Comparator; import java.util.concurrent.PriorityBlockingQueue; -import java.util.zip.CRC32; -import java.util.zip.Checksum; public class StreamReceiver extends Thread { diff --git a/src/main/java/seng302/models/stream/XMLParser.java b/src/main/java/seng302/model/stream/XMLParser.java similarity index 98% rename from src/main/java/seng302/models/stream/XMLParser.java rename to src/main/java/seng302/model/stream/XMLParser.java index 99ce72c8..8c023f06 100644 --- a/src/main/java/seng302/models/stream/XMLParser.java +++ b/src/main/java/seng302/model/stream/XMLParser.java @@ -1,4 +1,4 @@ -package seng302.models.stream; +package seng302.model.stream; import java.util.ArrayList; import java.util.HashMap; @@ -8,11 +8,11 @@ import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; -import seng302.models.Yacht; -import seng302.models.mark.GateMark; -import seng302.models.mark.Mark; -import seng302.models.mark.MarkType; -import seng302.models.mark.SingleMark; +import seng302.model.Yacht; +import seng302.model.mark.GateMark; +import seng302.model.mark.Mark; +import seng302.model.mark.MarkType; +import seng302.model.mark.SingleMark; /** * Class to create an XML object from the XML Packet Messages. diff --git a/src/main/java/seng302/models/stream/packets/BoatPositionPacket.java b/src/main/java/seng302/model/stream/packets/BoatPositionPacket.java similarity index 95% rename from src/main/java/seng302/models/stream/packets/BoatPositionPacket.java rename to src/main/java/seng302/model/stream/packets/BoatPositionPacket.java index 859223e0..1320c394 100644 --- a/src/main/java/seng302/models/stream/packets/BoatPositionPacket.java +++ b/src/main/java/seng302/model/stream/packets/BoatPositionPacket.java @@ -1,4 +1,4 @@ -package seng302.models.stream.packets; +package seng302.model.stream.packets; public class BoatPositionPacket { private long boatId; diff --git a/src/main/java/seng302/models/stream/packets/PacketType.java b/src/main/java/seng302/model/stream/packets/PacketType.java similarity index 94% rename from src/main/java/seng302/models/stream/packets/PacketType.java rename to src/main/java/seng302/model/stream/packets/PacketType.java index 6737d53f..693aa286 100644 --- a/src/main/java/seng302/models/stream/packets/PacketType.java +++ b/src/main/java/seng302/model/stream/packets/PacketType.java @@ -1,4 +1,6 @@ -package seng302.models.stream.packets; +package seng302.model.stream.packets; + +import java.lang.reflect.Type; /** * Created by Kusal on 4/24/2017. diff --git a/src/main/java/seng302/models/stream/packets/StreamPacket.java b/src/main/java/seng302/model/stream/packets/StreamPacket.java similarity index 95% rename from src/main/java/seng302/models/stream/packets/StreamPacket.java rename to src/main/java/seng302/model/stream/packets/StreamPacket.java index 22f2fe56..c6ee769a 100644 --- a/src/main/java/seng302/models/stream/packets/StreamPacket.java +++ b/src/main/java/seng302/model/stream/packets/StreamPacket.java @@ -1,4 +1,4 @@ -package seng302.models.stream.packets; +package seng302.model.stream.packets; /** * Created by kre39 on 23/04/17. diff --git a/src/main/java/seng302/client/ClientToServerThread.java b/src/main/java/seng302/visualiser/ClientToServerThread.java similarity index 73% rename from src/main/java/seng302/client/ClientToServerThread.java rename to src/main/java/seng302/visualiser/ClientToServerThread.java index 567435b3..0f73d5e0 100644 --- a/src/main/java/seng302/client/ClientToServerThread.java +++ b/src/main/java/seng302/visualiser/ClientToServerThread.java @@ -1,23 +1,36 @@ -package seng302.client; +package seng302.visualiser; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.Socket; +import java.util.ArrayList; +import java.util.List; +import java.util.Queue; +import java.util.concurrent.BlockingQueue; +import java.util.concurrent.ConcurrentLinkedQueue; import java.util.zip.CRC32; import java.util.zip.Checksum; -import seng302.models.stream.StreamParser; -import seng302.models.stream.packets.StreamPacket; +import javafx.beans.value.ChangeListener; +import javafx.collections.FXCollections; +import javafx.collections.ListChangeListener; +import javafx.collections.ObservableList; +import seng302.model.stream.StreamParser; +import seng302.model.stream.XMLParser; +import seng302.model.stream.packets.BoatPositionPacket; +import seng302.model.stream.packets.StreamPacket; import seng302.server.messages.BoatActionMessage; -import seng302.server.messages.BoatActionType; import seng302.server.messages.Message; /** * Created by kre39 on 13/07/17. */ public class ClientToServerThread extends Thread { + private Queue streamPackets = new ConcurrentLinkedQueue<>(); + private List>> boatPacketListeners = new ArrayList<>(); + private Socket socket; private InputStream is; private OutputStream os; @@ -49,17 +62,6 @@ public class ClientToServerThread extends Thread { // TODO: 14/07/17 wmu16 - Work out how to fix this while loop while(true) { try { - //Perform a write if it is time to as delegated by the MainServerThread - if (updateClient) { - // TODO: 13/07/17 wmu16 - Write out game state - some function that would write all appropriate messages to this output stream -// try { -// GameState.outputState(os); -// } catch (IOException e) { -// System.out.println("IO error in server thread upon writing to output stream"); -// } - updateClient = false; - } - crcBuffer = new ByteArrayOutputStream(); sync1 = readByte(); sync2 = readByte(); @@ -76,9 +78,10 @@ public class ClientToServerThread extends Thread { long computedCrc = checksum.getValue(); long packetCrc = Message.bytesToLong(getBytes(4)); if (computedCrc == packetCrc) { - StreamParser.parsePacket(new StreamPacket(type, payloadLength, timeStamp, payload)); - // TODO: 17/07/17 wmu16 - Fix this or maybe we dont need to go through the main server at all!?!? -// packetBufferDelegate.addToBuffer(new StreamPacket(type, payloadLength, timeStamp, payload)); + streamPackets.add(new StreamPacket(type, payloadLength, timeStamp, payload)); + for (ListChangeListener cl : boatPacketListeners) { + cl.onChanged(); + } } else { System.err.println("Packet has been dropped"); } @@ -111,6 +114,13 @@ public class ClientToServerThread extends Thread { } } + public void addStreamObserver (ListChangeListener> listChangeListener) { + boatPacketListeners.add(listChangeListener); + } + + public void removeStreamObserver (ListChangeListener> listChangeListener) { + boatPacketListeners.remove(listChangeListener); + } private int readByte() throws Exception { int currentByte = -1; diff --git a/src/main/java/seng302/controllers/GameViewController.java b/src/main/java/seng302/visualiser/GameView.java similarity index 86% rename from src/main/java/seng302/controllers/GameViewController.java rename to src/main/java/seng302/visualiser/GameView.java index daab7581..89fbe68f 100644 --- a/src/main/java/seng302/controllers/GameViewController.java +++ b/src/main/java/seng302/visualiser/GameView.java @@ -1,4 +1,4 @@ -package seng302.controllers; +package seng302.visualiser; import java.io.IOException; import java.util.ArrayList; @@ -8,46 +8,40 @@ import java.util.Map; import java.util.concurrent.PriorityBlockingQueue; import javafx.animation.AnimationTimer; import javafx.collections.ObservableList; -import javafx.fxml.FXML; import javafx.fxml.FXMLLoader; import javafx.geometry.Point2D; import javafx.scene.Group; import javafx.scene.Node; import javafx.scene.image.ImageView; -import javafx.scene.input.KeyEvent; import javafx.scene.layout.AnchorPane; import javafx.scene.layout.GridPane; import javafx.scene.layout.Pane; import javafx.scene.paint.Color; import javafx.scene.shape.Polygon; import javafx.scene.text.Text; -import seng302.fxObjects.BoatGroup; -import seng302.models.Colors; -import seng302.models.Yacht; -import seng302.models.mark.GateMark; -import seng302.models.mark.Mark; -import seng302.fxObjects.MarkGroup; -import seng302.models.mark.MarkType; -import seng302.models.mark.SingleMark; -import seng302.models.map.Boundary; -import seng302.models.map.CanvasMap; -import seng302.models.stream.StreamParser; -import seng302.models.stream.XMLParser; -import seng302.models.stream.XMLParser.RaceXMLObject.Limit; -import seng302.models.stream.XMLParser.RaceXMLObject.Participant; -import seng302.models.stream.packets.BoatPositionPacket; +import seng302.visualiser.controllers.RaceViewController; +import seng302.visualiser.fxObjects.BoatGroup; +import seng302.visualiser.fxObjects.MarkGroup; +import seng302.model.Colors; +import seng302.model.Yacht; +import seng302.model.map.Boundary; +import seng302.model.map.CanvasMap; +import seng302.model.mark.GateMark; +import seng302.model.mark.Mark; +import seng302.model.mark.MarkType; +import seng302.model.mark.SingleMark; +import seng302.model.stream.StreamParser; +import seng302.model.stream.XMLParser; +import seng302.model.stream.XMLParser.RaceXMLObject.Limit; +import seng302.model.stream.XMLParser.RaceXMLObject.Participant; +import seng302.model.stream.packets.BoatPositionPacket; import seng302.utilities.GeoPoint; import seng302.utilities.GeoUtility; /** - * Created by ptg19 on 15/03/17. - * Modified by Haoming Yin (hyi25) on 20/3/2017. + * Created by cir27 on 20/07/17. */ -public class GameViewController { - - @FXML - private AnchorPane mainPane; - +public class GameView extends Pane { private RaceViewController raceViewController; private ObservableList gameObjects; private ImageView mapImage; @@ -94,12 +88,12 @@ public class GameViewController { public void initialize() { raceViewController = new RaceViewController(); - gameObjects = mainPane.getChildren(); + gameObjects = this.getChildren(); // create image view for map, bind panel size to image mapImage = new ImageView(); - mainPane.getChildren().add(mapImage); - mapImage.fitWidthProperty().bind(mainPane.widthProperty()); - mapImage.fitHeightProperty().bind(mainPane.heightProperty()); + gameObjects.add(mapImage); + mapImage.fitWidthProperty().bind(this.widthProperty()); + mapImage.fitHeightProperty().bind(this.heightProperty()); } void initializeCanvas() { @@ -113,9 +107,9 @@ public class GameViewController { gameObjects.add(raceBorder); initializeMarks(); initializeBoats(); - mainPane.widthProperty().addListener(resize -> { - canvasWidth = mainPane.getWidth(); - canvasHeight = mainPane.getHeight(); + this.widthProperty().addListener(resize -> { + canvasWidth = this.getWidth(); + canvasHeight = this.getHeight(); fitMarksToCanvas(); }); @@ -125,34 +119,33 @@ public class GameViewController { @Override public void handle(long now) { - if (lastTime == 0) { - lastTime = now; - } else { - if (now - lastTime >= (1e8 / 60)) { //Fix for framerate going above 60 when minimized - long oldFrameTime = frameTimes[frameTimeIndex]; - frameTimes[frameTimeIndex] = now; - frameTimeIndex = (frameTimeIndex + 1) % frameTimes.length; - if (frameTimeIndex == 0) { - arrayFilled = true; - } - long elapsedNanos; - if (arrayFilled) { - elapsedNanos = now - oldFrameTime; - long elapsedNanosPerFrame = elapsedNanos / frameTimes.length; - frameRate = 1_000_000_000.0 / elapsedNanosPerFrame; - if (FPSCount-- == 0) { - FPSCount = 30; - drawFps(frameRate.intValue()); - } - raceViewController.updateSparkLine(); - } - updateGroups(); - if (StreamParser.isRaceFinished()) { - this.stop(); - } - lastTime = now; + if (lastTime == 0) { + lastTime = now; + } else { + if (now - lastTime >= (1e8 / 60)) { //Fix for framerate going above 60 when minimized + long oldFrameTime = frameTimes[frameTimeIndex]; + frameTimes[frameTimeIndex] = now; + frameTimeIndex = (frameTimeIndex + 1) % frameTimes.length; + if (frameTimeIndex == 0) { + arrayFilled = true; } + long elapsedNanos; + if (arrayFilled) { + elapsedNanos = now - oldFrameTime; + long elapsedNanosPerFrame = elapsedNanos / frameTimes.length; + frameRate = 1_000_000_000.0 / elapsedNanosPerFrame; + if (FPSCount-- == 0) { + FPSCount = 30; +// drawFps(frameRate.intValue()); + } + } + updateGroups(); + if (StreamParser.isRaceFinished()) { + this.stop(); + } + lastTime = now; } + } if (StreamParser.isRaceFinished()) { this.stop(); switchToFinishScreen(); @@ -164,7 +157,7 @@ public class GameViewController { private void switchToFinishScreen() { try { // canvas view -> anchor pane -> grid pane -> main view - GridPane gridPane = (GridPane) mainPane.getParent().getParent(); + GridPane gridPane = (GridPane) this.getParent().getParent(); AnchorPane contentPane = (AnchorPane) gridPane.getParent(); contentPane.getChildren().removeAll(); contentPane.getChildren().clear(); @@ -343,14 +336,14 @@ public class GameViewController { gameObjects.addAll(markGroups); } - private void drawFps(int fps){ - if (raceViewController.isDisplayFps()){ - FPSdisplay.setVisible(true); - FPSdisplay.setText(String.format("%d FPS", fps)); - } else { - FPSdisplay.setVisible(false); - } - } +// private void drawFps(int fps){ +// if (raceViewController.isDisplayFps()){ +// FPSdisplay.setVisible(true); +// FPSdisplay.setText(String.format("%d FPS", fps)); +// } else { +// FPSdisplay.setVisible(false); +// } +// } /** * Calculates x and y location for every marker that fits it to the canvas the race will be @@ -519,12 +512,4 @@ public class GameViewController { metersPerPixelY = dVertical / dy; } - List getBoatGroups() { - return boatGroups; - } - - List getMarkGroups() { - return markGroups; - } - -} \ No newline at end of file +} diff --git a/src/main/java/seng302/controllers/FinishScreenViewController.java b/src/main/java/seng302/visualiser/controllers/FinishScreenViewController.java similarity index 94% rename from src/main/java/seng302/controllers/FinishScreenViewController.java rename to src/main/java/seng302/visualiser/controllers/FinishScreenViewController.java index a2d79f36..b9010e8e 100644 --- a/src/main/java/seng302/controllers/FinishScreenViewController.java +++ b/src/main/java/seng302/visualiser/controllers/FinishScreenViewController.java @@ -1,4 +1,4 @@ -package seng302.controllers; +package seng302.visualiser.controllers; import java.io.IOException; import java.net.URL; @@ -15,9 +15,9 @@ import javafx.scene.control.cell.PropertyValueFactory; import javafx.scene.layout.AnchorPane; import javafx.scene.layout.GridPane; import javafx.scene.layout.Pane; -import seng302.models.Yacht; -import seng302.models.stream.StreamParser; -import seng302.models.stream.XMLParser.RaceXMLObject.Participant; +import seng302.model.Yacht; +import seng302.model.stream.StreamParser; +import seng302.model.stream.XMLParser.RaceXMLObject.Participant; public class FinishScreenViewController implements Initializable { diff --git a/src/main/java/seng302/controllers/LobbyController.java b/src/main/java/seng302/visualiser/controllers/LobbyController.java similarity index 98% rename from src/main/java/seng302/controllers/LobbyController.java rename to src/main/java/seng302/visualiser/controllers/LobbyController.java index 3f03783f..b0cbd0bc 100644 --- a/src/main/java/seng302/controllers/LobbyController.java +++ b/src/main/java/seng302/visualiser/controllers/LobbyController.java @@ -1,4 +1,4 @@ -package seng302.controllers; +package seng302.visualiser.controllers; import java.io.IOException; import java.net.Inet4Address; diff --git a/src/main/java/seng302/controllers/RaceViewController.java b/src/main/java/seng302/visualiser/controllers/RaceViewController.java similarity index 96% rename from src/main/java/seng302/controllers/RaceViewController.java rename to src/main/java/seng302/visualiser/controllers/RaceViewController.java index bb034dbe..70f348fe 100644 --- a/src/main/java/seng302/controllers/RaceViewController.java +++ b/src/main/java/seng302/visualiser/controllers/RaceViewController.java @@ -1,10 +1,9 @@ -package seng302.controllers; +package seng302.visualiser.controllers; import javafx.animation.KeyFrame; import javafx.animation.Timeline; import javafx.collections.FXCollections; import javafx.collections.ObservableList; -import javafx.event.EventHandler; import javafx.fxml.FXML; import javafx.fxml.FXMLLoader; import javafx.geometry.Point2D; @@ -17,7 +16,6 @@ import javafx.scene.control.Button; import javafx.scene.control.CheckBox; import javafx.scene.control.ComboBox; import javafx.scene.control.Slider; -import javafx.scene.input.KeyEvent; import javafx.scene.layout.AnchorPane; import javafx.scene.layout.Pane; import javafx.scene.layout.VBox; @@ -29,24 +27,23 @@ import javafx.stage.Stage; import javafx.stage.StageStyle; import javafx.util.Duration; import javafx.util.StringConverter; -import seng302.client.ClientToServerThread; import seng302.utilities.GeoUtility; -import seng302.controllers.annotations.Annotation; -import seng302.controllers.annotations.ImportantAnnotationController; -import seng302.controllers.annotations.ImportantAnnotationDelegate; -import seng302.controllers.annotations.ImportantAnnotationsState; -import seng302.fxObjects.BoatGroup; -import seng302.fxObjects.MarkGroup; -import seng302.models.*; -import seng302.models.mark.GateMark; -import seng302.models.mark.Mark; -import seng302.models.mark.SingleMark; -import seng302.models.stream.StreamParser; -import seng302.models.stream.XMLParser; +import seng302.visualiser.controllers.annotations.Annotation; +import seng302.visualiser.controllers.annotations.ImportantAnnotationController; +import seng302.visualiser.controllers.annotations.ImportantAnnotationDelegate; +import seng302.visualiser.controllers.annotations.ImportantAnnotationsState; +import seng302.visualiser.fxObjects.BoatGroup; +import seng302.visualiser.fxObjects.MarkGroup; +import seng302.model.*; +import seng302.model.mark.GateMark; +import seng302.model.mark.Mark; +import seng302.model.mark.SingleMark; +import seng302.model.stream.StreamParser; +import seng302.model.stream.XMLParser; import java.io.IOException; import java.util.*; -import seng302.models.stream.XMLParser.RaceXMLObject.Participant; +import seng302.model.stream.XMLParser.RaceXMLObject.Participant; import java.util.stream.Collectors; /** diff --git a/src/main/java/seng302/controllers/StartScreenController.java b/src/main/java/seng302/visualiser/controllers/StartScreenController.java similarity index 87% rename from src/main/java/seng302/controllers/StartScreenController.java rename to src/main/java/seng302/visualiser/controllers/StartScreenController.java index eb5990f0..4bf39e57 100644 --- a/src/main/java/seng302/controllers/StartScreenController.java +++ b/src/main/java/seng302/visualiser/controllers/StartScreenController.java @@ -1,4 +1,4 @@ -package seng302.controllers; +package seng302.visualiser.controllers; import javafx.fxml.FXML; import javafx.fxml.FXMLLoader; @@ -6,7 +6,7 @@ import javafx.scene.control.TextField; import javafx.scene.layout.AnchorPane; import javafx.scene.layout.GridPane; import javafx.scene.layout.Pane; -import seng302.client.ClientToServerThread; +import seng302.visualiser.ClientToServerThread; import seng302.gameServer.GameState; import seng302.gameServer.MainServerThread; @@ -25,8 +25,6 @@ public class StartScreenController { @FXML private GridPane startScreen2; - private Controller controller; - /** * Loads the fxml content into the parent pane * @param jfxUrl @@ -40,10 +38,7 @@ public class StartScreenController { contentPane.getStylesheets().add(getClass().getResource("/css/master.css").toString()); FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource(jfxUrl)); contentPane.getChildren().addAll((Pane) fxmlLoader.load()); - return fxmlLoader.getController(); - } catch (javafx.fxml.LoadException e) { - e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } @@ -80,15 +75,10 @@ public class StartScreenController { String ipAddress = ipTextField.getText().trim().toLowerCase(); try { ClientToServerThread clientToServerThread = new ClientToServerThread(ipAddress, 4950); - controller.setClientToServerThread(clientToServerThread); clientToServerThread.start(); setContentPane("/views/LobbyView.fxml"); } catch (Exception e){ e.printStackTrace(); } } - - public void setController(Controller controller) { - this.controller = controller; - } } diff --git a/src/main/java/seng302/controllers/annotations/Annotation.java b/src/main/java/seng302/visualiser/controllers/annotations/Annotation.java similarity index 75% rename from src/main/java/seng302/controllers/annotations/Annotation.java rename to src/main/java/seng302/visualiser/controllers/annotations/Annotation.java index 20a2c265..fddd2aa2 100644 --- a/src/main/java/seng302/controllers/annotations/Annotation.java +++ b/src/main/java/seng302/visualiser/controllers/annotations/Annotation.java @@ -1,4 +1,4 @@ -package seng302.controllers.annotations; +package seng302.visualiser.controllers.annotations; /** * Annotations the user can select as important diff --git a/src/main/java/seng302/controllers/annotations/ImportantAnnotationController.java b/src/main/java/seng302/visualiser/controllers/annotations/ImportantAnnotationController.java similarity index 98% rename from src/main/java/seng302/controllers/annotations/ImportantAnnotationController.java rename to src/main/java/seng302/visualiser/controllers/annotations/ImportantAnnotationController.java index b91f5ca1..70cc9aed 100644 --- a/src/main/java/seng302/controllers/annotations/ImportantAnnotationController.java +++ b/src/main/java/seng302/visualiser/controllers/annotations/ImportantAnnotationController.java @@ -1,4 +1,4 @@ -package seng302.controllers.annotations; +package seng302.visualiser.controllers.annotations; import javafx.fxml.FXML; import javafx.fxml.Initializable; diff --git a/src/main/java/seng302/controllers/annotations/ImportantAnnotationDelegate.java b/src/main/java/seng302/visualiser/controllers/annotations/ImportantAnnotationDelegate.java similarity index 90% rename from src/main/java/seng302/controllers/annotations/ImportantAnnotationDelegate.java rename to src/main/java/seng302/visualiser/controllers/annotations/ImportantAnnotationDelegate.java index ba50726e..a2b5e7a4 100644 --- a/src/main/java/seng302/controllers/annotations/ImportantAnnotationDelegate.java +++ b/src/main/java/seng302/visualiser/controllers/annotations/ImportantAnnotationDelegate.java @@ -1,4 +1,4 @@ -package seng302.controllers.annotations; +package seng302.visualiser.controllers.annotations; /** * An ImportantAnnotationDelegate handles updating the important annotations diff --git a/src/main/java/seng302/controllers/annotations/ImportantAnnotationsState.java b/src/main/java/seng302/visualiser/controllers/annotations/ImportantAnnotationsState.java similarity index 96% rename from src/main/java/seng302/controllers/annotations/ImportantAnnotationsState.java rename to src/main/java/seng302/visualiser/controllers/annotations/ImportantAnnotationsState.java index 5cc97a7f..73dc11c2 100644 --- a/src/main/java/seng302/controllers/annotations/ImportantAnnotationsState.java +++ b/src/main/java/seng302/visualiser/controllers/annotations/ImportantAnnotationsState.java @@ -1,4 +1,4 @@ -package seng302.controllers.annotations; +package seng302.visualiser.controllers.annotations; import java.util.HashMap; import java.util.Map; diff --git a/src/main/java/seng302/visualiser/controllers/client/ClientController.java b/src/main/java/seng302/visualiser/controllers/client/ClientController.java new file mode 100644 index 00000000..047994b5 --- /dev/null +++ b/src/main/java/seng302/visualiser/controllers/client/ClientController.java @@ -0,0 +1,120 @@ +package seng302.visualiser.controllers.client; + +import javafx.beans.value.ChangeListener; +import javafx.scene.Node; +import javafx.scene.input.KeyEvent; +import javafx.scene.layout.AnchorPane; +import javafx.scene.layout.Pane; +import seng302.model.stream.XMLParser; +import seng302.model.stream.packets.StreamPacket; +import seng302.server.messages.BoatActionMessage; +import seng302.server.messages.BoatActionType; +import seng302.visualiser.ClientToServerThread; + +/** + * Created by cir27 on 20/07/17. + */ +public class ClientController { + + Pane holderPane; + ClientToServerThread socketThread; + + public ClientController (String ipAddress, Pane holder) { + this.holderPane = holder; + socketThread = new ClientToServerThread(ipAddress, 4950); + socketThread.start(); + socketThread.waitForXML(event -> storeXMLData()); + } + + private void parsePacket(StreamPacket packet) { + try { + switch (packet.getType()) { + case HEARTBEAT: + extractHeartBeat(packet); + break; + case RACE_STATUS: + extractRaceStatus(packet); + break; + case DISPLAY_TEXT_MESSAGE: + extractDisplayMessage(packet); + break; + case XML_MESSAGE: + newRaceXmlReceived = true; + extractXmlMessage(packet); + break; + case RACE_START_STATUS: + extractRaceStartStatus(packet); + break; + case YACHT_EVENT_CODE: + extractYachtEventCode(packet); + break; + case YACHT_ACTION_CODE: + extractYachtActionCode(packet); + break; + case CHATTER_TEXT: + extractChatterText(packet); + break; + case BOAT_LOCATION: + extractBoatLocation(packet); + break; + case MARK_ROUNDING: + extractMarkRounding(packet); + break; + case COURSE_WIND: + extractCourseWind(packet); + break; + case AVG_WIND: + extractAvgWind(packet); + break; + case BOAT_ACTION: + extractBoatAction(packet); + break; + } + } catch (NullPointerException e) { + System.out.println("Error parsing packet"); + e.printStackTrace(); + } + } + +// /** Handle the key-pressed event from the text field. */ +// public void keyPressed(KeyEvent e) { +// BoatActionMessage boatActionMessage; +// switch (e.getCode()){ +// case SPACE: // align with vmg +// boatActionMessage = new BoatActionMessage(BoatActionType.VMG); +// clientToServerThread.sendBoatActionMessage(boatActionMessage); +// break; +// case PAGE_UP: // upwind +// boatActionMessage = new BoatActionMessage(BoatActionType.UPWIND); +// clientToServerThread.sendBoatActionMessage(boatActionMessage); +// break; +// case PAGE_DOWN: // downwind +// boatActionMessage = new BoatActionMessage(BoatActionType.DOWNWIND); +// clientToServerThread.sendBoatActionMessage(boatActionMessage); +// break; +// case ENTER: // tack/gybe +// boatActionMessage = new BoatActionMessage(BoatActionType.TACK_GYBE); +// clientToServerThread.sendBoatActionMessage(boatActionMessage); +// break; +// //TODO Allow a zoom in and zoom out methods +// case Z: // zoom in +// System.out.println("Zoom in"); +// break; +// case X: // zoom out +// System.out.println("Zoom out"); +// break; +// } +// } +// +// public void keyReleased(KeyEvent e) { +// switch (e.getCode()) { +// //TODO 12/07/17 Determine the sail state and send the appropriate packet (eg. if sails are in, send a sail out packet) +// case SHIFT: // sails in/sails out +// BoatActionMessage boatActionMessage = new BoatActionMessage(BoatActionType.SAILS_IN); +// clientToServerThread.sendBoatActionMessage(boatActionMessage); +// break; +// } +// } +// +// onKeyPressed="#keyPressed" onKeyReleased="#keyReleased" +} diff --git a/src/main/java/seng302/visualiser/controllers/host/HostController.java b/src/main/java/seng302/visualiser/controllers/host/HostController.java new file mode 100644 index 00000000..02582d56 --- /dev/null +++ b/src/main/java/seng302/visualiser/controllers/host/HostController.java @@ -0,0 +1,13 @@ +package seng302.visualiser.controllers.host; + +import javafx.scene.layout.Pane; + +/** + * Created by cir27 on 20/07/17. + */ +public class HostController { + Pane mainHolder; + public HostController (Pane holder) { + this.mainHolder = holder; + } +} diff --git a/src/main/java/seng302/fxObjects/BoatAnnotations.java b/src/main/java/seng302/visualiser/fxObjects/BoatAnnotations.java similarity index 97% rename from src/main/java/seng302/fxObjects/BoatAnnotations.java rename to src/main/java/seng302/visualiser/fxObjects/BoatAnnotations.java index fbba2257..815f44e6 100644 --- a/src/main/java/seng302/fxObjects/BoatAnnotations.java +++ b/src/main/java/seng302/visualiser/fxObjects/BoatAnnotations.java @@ -1,12 +1,12 @@ -package seng302.fxObjects; +package seng302.visualiser.fxObjects; import javafx.scene.CacheHint; import javafx.scene.Group; import javafx.scene.paint.Color; import javafx.scene.shape.Rectangle; import javafx.scene.text.Text; -import seng302.models.Yacht; -import seng302.models.stream.StreamParser; +import seng302.model.Yacht; +import seng302.model.stream.StreamParser; import java.text.DateFormat; import java.text.SimpleDateFormat; diff --git a/src/main/java/seng302/fxObjects/BoatGroup.java b/src/main/java/seng302/visualiser/fxObjects/BoatGroup.java similarity index 97% rename from src/main/java/seng302/fxObjects/BoatGroup.java rename to src/main/java/seng302/visualiser/fxObjects/BoatGroup.java index d309f9d1..2542fe81 100644 --- a/src/main/java/seng302/fxObjects/BoatGroup.java +++ b/src/main/java/seng302/visualiser/fxObjects/BoatGroup.java @@ -1,4 +1,4 @@ -package seng302.fxObjects; +package seng302.visualiser.fxObjects; import java.util.ArrayList; @@ -9,13 +9,13 @@ import javafx.scene.paint.Color; import javafx.scene.shape.Line; import javafx.scene.shape.Polygon; import javafx.scene.transform.Rotate; -import seng302.controllers.GameViewController; -import seng302.models.Yacht; +import seng302.visualiser.controllers.GameViewController; +import seng302.model.Yacht; import seng302.utilities.GeoUtility; -import seng302.models.mark.GateMark; -import seng302.models.mark.Mark; -import seng302.models.mark.SingleMark; -import seng302.models.stream.StreamParser; +import seng302.model.mark.GateMark; +import seng302.model.mark.Mark; +import seng302.model.mark.SingleMark; +import seng302.model.stream.StreamParser; /** * BoatGroup is a javafx group that by default contains a graphical objects for representing a 2 diff --git a/src/main/java/seng302/fxObjects/MarkGroup.java b/src/main/java/seng302/visualiser/fxObjects/MarkGroup.java similarity index 96% rename from src/main/java/seng302/fxObjects/MarkGroup.java rename to src/main/java/seng302/visualiser/fxObjects/MarkGroup.java index 597338a1..f615d3e3 100644 --- a/src/main/java/seng302/fxObjects/MarkGroup.java +++ b/src/main/java/seng302/visualiser/fxObjects/MarkGroup.java @@ -1,4 +1,4 @@ -package seng302.fxObjects; +package seng302.visualiser.fxObjects; import java.util.ArrayList; import java.util.List; @@ -8,10 +8,10 @@ import javafx.scene.Node; import javafx.scene.paint.Color; import javafx.scene.shape.Circle; import javafx.scene.shape.Line; -import seng302.models.mark.GateMark; -import seng302.models.mark.Mark; -import seng302.models.mark.MarkType; -import seng302.models.mark.SingleMark; +import seng302.model.mark.GateMark; +import seng302.model.mark.Mark; +import seng302.model.mark.MarkType; +import seng302.model.mark.SingleMark; /** * Grouping of javaFX objects needed to represent a Mark on screen. diff --git a/src/main/java/seng302/fxObjects/Wake.java b/src/main/java/seng302/visualiser/fxObjects/Wake.java similarity index 98% rename from src/main/java/seng302/fxObjects/Wake.java rename to src/main/java/seng302/visualiser/fxObjects/Wake.java index 8f8cc8aa..cf077ae3 100644 --- a/src/main/java/seng302/fxObjects/Wake.java +++ b/src/main/java/seng302/visualiser/fxObjects/Wake.java @@ -1,4 +1,4 @@ -package seng302.fxObjects; +package seng302.visualiser.fxObjects; import javafx.scene.CacheHint; import javafx.scene.Group; @@ -7,7 +7,6 @@ import javafx.scene.shape.Arc; import javafx.scene.shape.ArcType; import javafx.scene.shape.StrokeLineCap; import javafx.scene.transform.Rotate; -import javafx.scene.transform.Scale; /** * A group containing objects used to represent wakes onscreen. Contains functionality for their animation. diff --git a/src/main/resources/views/FinishScreenView.fxml b/src/main/resources/views/FinishScreenView.fxml index 736c8b74..a5ef1fa1 100644 --- a/src/main/resources/views/FinishScreenView.fxml +++ b/src/main/resources/views/FinishScreenView.fxml @@ -6,7 +6,7 @@ - + diff --git a/src/main/resources/views/GameView.fxml b/src/main/resources/views/GameView.fxml index eada7edc..fe6cadf6 100644 --- a/src/main/resources/views/GameView.fxml +++ b/src/main/resources/views/GameView.fxml @@ -4,4 +4,4 @@ - + diff --git a/src/main/resources/views/HostLobbyView.fxml b/src/main/resources/views/HostLobbyView.fxml new file mode 100644 index 00000000..454f3ff6 --- /dev/null +++ b/src/main/resources/views/HostLobbyView.fxml @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +