diff --git a/src/main/java/seng302/client/ClientToServerThread.java b/src/main/java/seng302/client/ClientToServerThread.java index 6a7b995d..216315dc 100644 --- a/src/main/java/seng302/client/ClientToServerThread.java +++ b/src/main/java/seng302/client/ClientToServerThread.java @@ -60,7 +60,6 @@ public class ClientToServerThread extends Thread { // } updateClient = false; } - crcBuffer = new ByteArrayOutputStream(); sync1 = readByte(); sync2 = readByte(); diff --git a/src/main/java/seng302/controllers/LobbyController.java b/src/main/java/seng302/controllers/LobbyController.java index 3f03783f..565812cc 100644 --- a/src/main/java/seng302/controllers/LobbyController.java +++ b/src/main/java/seng302/controllers/LobbyController.java @@ -103,5 +103,7 @@ public class LobbyController implements Initializable{ @FXML public void readyButtonPressed() { GameState.setCurrentStage(GameStages.RACING); + setContentPane("/views/RaceView.fxml"); + } } diff --git a/src/main/java/seng302/controllers/RaceViewController.java b/src/main/java/seng302/controllers/RaceViewController.java index 8eb336e7..397b54cb 100644 --- a/src/main/java/seng302/controllers/RaceViewController.java +++ b/src/main/java/seng302/controllers/RaceViewController.java @@ -95,16 +95,16 @@ public class RaceViewController extends Thread implements ImportantAnnotationDel raceSparkLine.getYAxis().setTranslateX(-5); raceSparkLine.getYAxis().setAutoRanging(false); sparklineYAxis.setTickMarkVisible(false); - startingBoats = new ArrayList<>(StreamParser.getBoats().values()); + //startingBoats = new ArrayList<>(StreamParser.getBoats().values()); - includedCanvasController.setup(this); - includedCanvasController.initializeCanvas(); - initializeUpdateTimer(); - initialiseFPSCheckBox(); - initialiseAnnotationSlider(); - initialiseBoatSelectionComboBox(); - includedCanvasController.timer.start(); - selectAnnotationBtn.setOnAction(event -> loadSelectAnnotationView()); + //includedCanvasController.setup(this); + //includedCanvasController.initializeCanvas(); + //initializeUpdateTimer(); + //initialiseFPSCheckBox(); + //initialiseAnnotationSlider(); + //initialiseBoatSelectionComboBox(); + //includedCanvasController.timer.start(); + //selectAnnotationBtn.setOnAction(event -> loadSelectAnnotationView()); } diff --git a/src/main/java/seng302/controllers/StartScreenController.java b/src/main/java/seng302/controllers/StartScreenController.java index eb5990f0..6f9a094c 100644 --- a/src/main/java/seng302/controllers/StartScreenController.java +++ b/src/main/java/seng302/controllers/StartScreenController.java @@ -40,7 +40,6 @@ 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(); @@ -63,6 +62,10 @@ public class StartScreenController { String ipAddress = InetAddress.getLocalHost().getHostAddress(); new GameState(ipAddress); new MainServerThread().start(); + ClientToServerThread clientToServerThread = new ClientToServerThread("localhost", 4950); + controller.setClientToServerThread(clientToServerThread); + clientToServerThread.start(); +// new GameServerThread("Fuck you"); // get the lobby controller so that we can pass the game server thread to it setContentPane("/views/LobbyView.fxml"); diff --git a/src/main/java/seng302/gameServer/MainServerThread.java b/src/main/java/seng302/gameServer/MainServerThread.java index 8caf5e9c..df6c1fcc 100644 --- a/src/main/java/seng302/gameServer/MainServerThread.java +++ b/src/main/java/seng302/gameServer/MainServerThread.java @@ -58,9 +58,10 @@ public class MainServerThread extends Thread implements PacketBufferDelegate, Cl } + //RACING if (GameState.getCurrentStage() == GameStages.RACING) { - + updateClients(); } @@ -68,9 +69,9 @@ public class MainServerThread extends Thread implements PacketBufferDelegate, Cl else if (GameState.getCurrentStage() == GameStages.FINISHED) { } - updateClients(); + while (!packetBuffer.isEmpty()){ System.out.println("WHATUPPP"); try { @@ -114,6 +115,13 @@ public class MainServerThread extends Thread implements PacketBufferDelegate, Cl return packetBuffer.add(streamPacket); } + private void initializeRace(){ + for (ServerToClientThread serverToClientThread : serverToClientThreads) { + serverToClientThread.updateClient(); + } + } + + /** * A client has tried to connect to the server * @param serverToClientThread The player that connected diff --git a/src/main/java/seng302/gameServer/ServerToClientThread.java b/src/main/java/seng302/gameServer/ServerToClientThread.java index 7198875c..6ea157bf 100644 --- a/src/main/java/seng302/gameServer/ServerToClientThread.java +++ b/src/main/java/seng302/gameServer/ServerToClientThread.java @@ -5,6 +5,8 @@ import seng302.models.Player; import seng302.models.stream.PacketBufferDelegate; import seng302.models.stream.StreamParser; import seng302.models.stream.packets.StreamPacket; +import seng302.server.messages.ChatterMessage; +import seng302.server.messages.Heartbeat; import seng302.server.messages.Message; import java.io.*; @@ -54,6 +56,9 @@ public class ServerToClientThread extends Thread { //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 + ChatterMessage chatterMessage = new ChatterMessage(4, 14, "Hello, it's me"); + sendMessage(chatterMessage); + // try { // GameState.outputState(os); // } catch (IOException e) { @@ -62,9 +67,11 @@ public class ServerToClientThread extends Thread { updateClient = false; } + crcBuffer = new ByteArrayOutputStream(); sync1 = readByte(); sync2 = readByte(); + //checking if it is the start of the packet if(sync1 == 0x47 && sync2 == 0x83) { int type = readByte(); @@ -86,6 +93,7 @@ public class ServerToClientThread extends Thread { } } } catch (Exception e) { + e.printStackTrace(); closeSocket(); return; } @@ -162,4 +170,12 @@ public class ServerToClientThread extends Thread { readByte(); } } + + public void sendMessage(Message message){ + try { + os.write(message.getBuffer()); + } catch (IOException e) { + e.printStackTrace(); + } + } } diff --git a/src/main/java/seng302/models/stream/StreamParser.java b/src/main/java/seng302/models/stream/StreamParser.java index f1ea501a..a1c0d985 100644 --- a/src/main/java/seng302/models/stream/StreamParser.java +++ b/src/main/java/seng302/models/stream/StreamParser.java @@ -123,6 +123,7 @@ public class StreamParser{ */ private static void extractHeartBeat(StreamPacket packet) { long heartbeat = bytesToLong(packet.getPayload()); + System.out.println("heartbeat = " + heartbeat); } private static String getTimeZoneString() { @@ -354,6 +355,7 @@ public class StreamParser{ int messageType = payload[1]; int length = payload[2]; String message = new String(Arrays.copyOfRange(payload, 3, 3 + length)); + System.out.println(message); } /** diff --git a/src/main/java/seng302/server/messages/BoatActionMessage.java b/src/main/java/seng302/server/messages/BoatActionMessage.java index 9dfc5769..4a53f40a 100644 --- a/src/main/java/seng302/server/messages/BoatActionMessage.java +++ b/src/main/java/seng302/server/messages/BoatActionMessage.java @@ -29,4 +29,5 @@ public class BoatActionMessage extends Message{ return MESSAGE_SIZE; } + } diff --git a/src/main/java/seng302/server/messages/ChatterMessage.java b/src/main/java/seng302/server/messages/ChatterMessage.java new file mode 100644 index 00000000..8480a9d5 --- /dev/null +++ b/src/main/java/seng302/server/messages/ChatterMessage.java @@ -0,0 +1,38 @@ +package seng302.server.messages; + +/** + * Created by kre39 on 20/07/17. + */ +public class ChatterMessage extends Message { + + private final long MESSAGE_VERSION_NUMBER = 1; + private final int MESSAGE_SIZE = 3; + private int message_type; + private int message_size = 21; + private String message; + + public ChatterMessage(int message_type, int message_size, String message) { + this.message_type = message_type; + this.message_size = message_size; + this.message = message; + + setHeader(new Header(MessageType.CHATTER_TEXT, 1, (short) getSize())); + allocateBuffer(); + writeHeaderToBuffer(); + + putByte((byte) MESSAGE_VERSION_NUMBER); + putInt(message_type, 1); + putInt(message_size, 1); + putBytes(message.getBytes()); + + writeCRC(); + rewind(); + } + + @Override + public int getSize() { + return MESSAGE_SIZE + message_size; + } + + +} diff --git a/src/main/java/seng302/server/messages/Message.java b/src/main/java/seng302/server/messages/Message.java index 478ba962..398628ab 100644 --- a/src/main/java/seng302/server/messages/Message.java +++ b/src/main/java/seng302/server/messages/Message.java @@ -219,5 +219,4 @@ public abstract class Message { data[right] = (byte) (temp & 0xff); } } - }