diff --git a/src/main/java/seng302/client/ClientToServerThread.java b/src/main/java/seng302/client/ClientToServerThread.java index bdf0710b..79d2de3f 100644 --- a/src/main/java/seng302/client/ClientToServerThread.java +++ b/src/main/java/seng302/client/ClientToServerThread.java @@ -15,7 +15,10 @@ import seng302.server.messages.Message; /** * Created by kre39 on 13/07/17. */ -public class ClientToServerThread extends Thread { +public class ClientToServerThread implements Runnable { + + private Thread thread; + private Socket socket; private InputStream is; private OutputStream os; @@ -33,6 +36,9 @@ public class ClientToServerThread extends Thread { e.printStackTrace(); } + thread = new Thread(this); + thread.start(); + } static void clientLog(String message, int logLevel){ @@ -139,4 +145,8 @@ public class ClientToServerThread extends Thread { readByte(); } } - } + + public Thread getThread() { + return thread; + } +} diff --git a/src/main/java/seng302/controllers/StartScreenController.java b/src/main/java/seng302/controllers/StartScreenController.java index eb5990f0..42a282e7 100644 --- a/src/main/java/seng302/controllers/StartScreenController.java +++ b/src/main/java/seng302/controllers/StartScreenController.java @@ -62,10 +62,9 @@ public class StartScreenController { try { String ipAddress = InetAddress.getLocalHost().getHostAddress(); new GameState(ipAddress); - new MainServerThread().start(); + new MainServerThread(); // get the lobby controller so that we can pass the game server thread to it setContentPane("/views/LobbyView.fxml"); - } catch (UnknownHostException e) { System.err.println("COULD NOT FIND YOUR IP ADDRESS!"); e.printStackTrace(); @@ -79,9 +78,9 @@ public class StartScreenController { // TODO: 10/07/17 wmu16 - Finish function String ipAddress = ipTextField.getText().trim().toLowerCase(); try { + // TODO: 22/07/17 wmu 16 - make this port number some static constant somewhere perhaps a config file? ClientToServerThread clientToServerThread = new ClientToServerThread(ipAddress, 4950); controller.setClientToServerThread(clientToServerThread); - clientToServerThread.start(); setContentPane("/views/LobbyView.fxml"); } catch (Exception e){ e.printStackTrace(); diff --git a/src/main/java/seng302/gameServer/MainServerThread.java b/src/main/java/seng302/gameServer/MainServerThread.java index b28dce91..aae020da 100644 --- a/src/main/java/seng302/gameServer/MainServerThread.java +++ b/src/main/java/seng302/gameServer/MainServerThread.java @@ -15,12 +15,14 @@ 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 extends Thread implements PacketBufferDelegate, ClientConnectionDelegate{ +public class MainServerThread implements Runnable, PacketBufferDelegate, ClientConnectionDelegate{ private static final int PORT = 4950; private static final Integer MAX_NUM_PLAYERS = 3; private static final int LOG_LEVEL = 1; + private Thread thread; + private ServerSocket serverSocket = null; private Socket socket; private ArrayList serverToClientThreads = new ArrayList<>(); @@ -36,6 +38,9 @@ public class MainServerThread extends Thread implements PacketBufferDelegate, Cl } packetBuffer = new PriorityBlockingQueue<>(); + + thread = new Thread(this); + thread.start(); } @@ -50,7 +55,7 @@ public class MainServerThread extends Thread implements PacketBufferDelegate, Cl serverListenThread.start(); //You should handle interrupts in some way, so that the thread won't keep on forever if you exit the app. - while (!isInterrupted()) { + while (!thread.isInterrupted()) { try { Thread.sleep(1000 / 60); //60 times per second we should calculate the game state } catch (InterruptedException e) { @@ -122,7 +127,7 @@ public class MainServerThread extends Thread implements PacketBufferDelegate, Cl */ @Override public void clientConnected(ServerToClientThread serverToClientThread) { - serverLog("Player Connected From " + serverToClientThread.getName(), 0); + serverLog("Player Connected From " + serverToClientThread.getThread().getName(), 0); serverToClientThreads.add(serverToClientThread); } diff --git a/src/main/java/seng302/gameServer/ServerListenThread.java b/src/main/java/seng302/gameServer/ServerListenThread.java index b734ab8c..f36d08df 100644 --- a/src/main/java/seng302/gameServer/ServerListenThread.java +++ b/src/main/java/seng302/gameServer/ServerListenThread.java @@ -29,7 +29,6 @@ public class ServerListenThread extends Thread{ Socket thisClient = serverSocket.accept(); if (thisClient != null){ ServerToClientThread thisConnection = new ServerToClientThread(thisClient); - thisConnection.start(); delegate.clientConnected(thisConnection); } } catch (IOException e) { diff --git a/src/main/java/seng302/gameServer/ServerToClientThread.java b/src/main/java/seng302/gameServer/ServerToClientThread.java index 69851682..72dbd53a 100644 --- a/src/main/java/seng302/gameServer/ServerToClientThread.java +++ b/src/main/java/seng302/gameServer/ServerToClientThread.java @@ -20,11 +20,13 @@ 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 extends Thread { +public class ServerToClientThread implements Runnable { private static final Integer LOG_LEVEL = 1; private static final Integer MAX_ID_ATTEMPTS = 10; + private Thread thread; + private InputStream is; private OutputStream os; private Socket socket; @@ -50,6 +52,9 @@ public class ServerToClientThread extends Thread { Random rand = new Random(); sourceId = rand.nextInt(100000); GameState.addYacht(sourceId, new Yacht("Kappa", "Kap", new GeoPoint(0.0, 0.0), 0.0)); + + thread = new Thread(this); + thread.start(); } @@ -185,4 +190,9 @@ public class ServerToClientThread extends Thread { readByte(); } } + + + public Thread getThread() { + return thread; + } }