diff --git a/src/main/java/seng302/gameServer/MainServerThread.java b/src/main/java/seng302/gameServer/MainServerThread.java index 80539881..92b09b40 100644 --- a/src/main/java/seng302/gameServer/MainServerThread.java +++ b/src/main/java/seng302/gameServer/MainServerThread.java @@ -1,5 +1,6 @@ package seng302.gameServer; +import java.util.Observable; import seng302.client.ClientPacketParser; import seng302.models.Player; import seng302.models.stream.PacketBufferDelegate; @@ -15,7 +16,7 @@ import java.util.concurrent.PriorityBlockingQueue; * A class describing the overall server, which creates and collects server threads for each client * Created by wmu16 on 13/07/17. */ -public class MainServerThread implements Runnable, PacketBufferDelegate, ClientConnectionDelegate{ +public class MainServerThread extends Observable implements Runnable, PacketBufferDelegate, ClientConnectionDelegate{ private static final int PORT = 4942; private static final Integer MAX_NUM_PLAYERS = 3; @@ -54,6 +55,7 @@ public class MainServerThread implements Runnable, PacketBufferDelegate, ClientC heartbeatThread.start(); serverListenThread.start(); + //You should handle interrupts in some way, so that the thread won't keep on forever if you exit the app. while (!thread.isInterrupted()) { try { @@ -64,7 +66,6 @@ public class MainServerThread implements Runnable, PacketBufferDelegate, ClientC if (GameState.getCurrentStage() == GameStages.PRE_RACE) { GameState.update(); - updateClients(); } //RACING @@ -99,6 +100,8 @@ public class MainServerThread implements Runnable, PacketBufferDelegate, ClientC } + + public void updateClients() { for (ServerToClientThread serverToClientThread : serverToClientThreads) { serverToClientThread.updateClient(); @@ -125,7 +128,9 @@ public class MainServerThread implements Runnable, PacketBufferDelegate, ClientC public void clientConnected(ServerToClientThread serverToClientThread) { serverLog("Player Connected From " + serverToClientThread.getThread().getName(), 0); serverToClientThreads.add(serverToClientThread); - + this.addObserver(serverToClientThread); + setChanged(); + notifyObservers(); } /** diff --git a/src/main/java/seng302/gameServer/ServerToClientThread.java b/src/main/java/seng302/gameServer/ServerToClientThread.java index 343facb5..eccf2bd2 100644 --- a/src/main/java/seng302/gameServer/ServerToClientThread.java +++ b/src/main/java/seng302/gameServer/ServerToClientThread.java @@ -7,6 +7,8 @@ import java.io.InputStream; import java.io.OutputStream; import java.net.Socket; import java.util.ArrayList; +import java.util.Observable; +import java.util.Observer; import java.util.Random; import java.util.zip.CRC32; import java.util.zip.Checksum; @@ -37,7 +39,7 @@ import seng302.utilities.GeoPoint; * All server threads created and owned by the server thread handler which can trigger client updates on its threads * Created by wmu16 on 13/07/17. */ -public class ServerToClientThread implements Runnable { +public class ServerToClientThread implements Runnable, Observer { private static final Integer LOG_LEVEL = 1; private static final Integer MAX_ID_ATTEMPTS = 10; @@ -93,6 +95,11 @@ public class ServerToClientThread implements Runnable { } } + @Override + public void update(Observable o, Object arg) { + sendSetupMessages(); + } + public void run() { int sync1; int sync2; @@ -177,13 +184,6 @@ public class ServerToClientThread implements Runnable { //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) { -// System.out.println("IO error in server thread upon writing to output stream"); -// } sendBoatLocationPackets(); updateClient = false; } @@ -247,6 +247,7 @@ public class ServerToClientThread implements Runnable { xmlMessage = new XMLMessage(xml.getRaceAsXml(), XMLMessageSubType.RACE, xml.getRaceAsXml().length()); sendMessage(xmlMessage); + System.out.println("Sent xml messages for " + thread.getName()); } @@ -295,10 +296,6 @@ public class ServerToClientThread implements Runnable { } - public void initialiseRace(){ - initialisedRace = true; - } - private int readByte() throws Exception { int currentByte = -1;