diff --git a/src/main/java/seng302/gameServer/MainServerThread.java b/src/main/java/seng302/gameServer/MainServerThread.java index c765d05b..02d53f78 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 e317d375..6871a9f4 100644 --- a/src/main/java/seng302/gameServer/ServerToClientThread.java +++ b/src/main/java/seng302/gameServer/ServerToClientThread.java @@ -3,6 +3,13 @@ package seng302.gameServer; import seng302.model.Player; import seng302.model.stream.StreamParser; import seng302.model.stream.packets.StreamPacket; +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.server.messages.ChatterMessage; +import seng302.server.messages.Heartbeat; import seng302.server.messages.Message; import java.io.*; @@ -52,6 +59,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) { @@ -60,9 +70,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(); @@ -84,6 +96,7 @@ public class ServerToClientThread extends Thread { } } } catch (Exception e) { + e.printStackTrace(); closeSocket(); return; } @@ -160,4 +173,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/model/stream/StreamParser.java b/src/main/java/seng302/model/stream/StreamParser.java index 056b8ec8..13927934 100644 --- a/src/main/java/seng302/model/stream/StreamParser.java +++ b/src/main/java/seng302/model/stream/StreamParser.java @@ -121,6 +121,7 @@ public class StreamParser{ */ private static void extractHeartBeat(StreamPacket packet) { long heartbeat = bytesToLong(packet.getPayload()); + System.out.println("heartbeat = " + heartbeat); } private static String getTimeZoneString() { @@ -352,6 +353,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); } } - } diff --git a/src/main/java/seng302/visualiser/controllers/LobbyController.java b/src/main/java/seng302/visualiser/controllers/LobbyController.java index b0cbd0bc..efcb388a 100644 --- a/src/main/java/seng302/visualiser/controllers/LobbyController.java +++ b/src/main/java/seng302/visualiser/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/visualiser/controllers/StartScreenController.java b/src/main/java/seng302/visualiser/controllers/StartScreenController.java index 4bf39e57..fc836888 100644 --- a/src/main/java/seng302/visualiser/controllers/StartScreenController.java +++ b/src/main/java/seng302/visualiser/controllers/StartScreenController.java @@ -58,6 +58,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");