diff --git a/src/main/java/seng302/controllers/LobbyController.java b/src/main/java/seng302/controllers/LobbyController.java index 4f2b9584..c7835b30 100644 --- a/src/main/java/seng302/controllers/LobbyController.java +++ b/src/main/java/seng302/controllers/LobbyController.java @@ -1,9 +1,14 @@ package seng302.controllers; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; +import javafx.collections.FXCollections; +import javafx.collections.ObservableList; import javafx.fxml.FXML; import javafx.fxml.FXMLLoader; -import javafx.scene.control.TableColumn; -import javafx.scene.control.TableView; +import javafx.scene.control.ListView; import javafx.scene.layout.AnchorPane; import javafx.scene.layout.GridPane; import javafx.scene.layout.Pane; @@ -11,8 +16,8 @@ import javafx.scene.text.Text; import seng302.gameServer.GameServerThread; import seng302.gameServer.GameStages; import seng302.gameServer.GameState; - -import java.io.IOException; +import seng302.gameServerWithThreading.MainServerThread; +import seng302.gameServerWithThreading.ServerToClientThread; /** * A class describing the actions of the lobby screen @@ -20,12 +25,15 @@ import java.io.IOException; */ public class LobbyController { + @FXML + private ListView competitorsListView; @FXML private GridPane lobbyScreen; @FXML private Text lobbyIpText; private GameServerThread gameServerThread; + private static ObservableList competitors; private void setContentPane(String jfxUrl) { try { @@ -42,6 +50,11 @@ public class LobbyController { } } + public void initialize() { + competitors = FXCollections.observableArrayList(); + competitorsListView.setItems(competitors); + } + @FXML public void leaveLobbyButtonPressed() { @@ -52,6 +65,11 @@ public class LobbyController { gameServerThread.terminateGame(); } + public static void refreshCompetitors(){ + Collection competitorsIps = MainServerThread.getServerToClientThreads(); + competitors.clear(); + competitors.addAll(competitorsIps); + } @FXML public void readyButtonPressed() { diff --git a/src/main/java/seng302/controllers/StartScreenController.java b/src/main/java/seng302/controllers/StartScreenController.java index 738377a4..04459ff3 100644 --- a/src/main/java/seng302/controllers/StartScreenController.java +++ b/src/main/java/seng302/controllers/StartScreenController.java @@ -80,10 +80,14 @@ public class StartScreenController { public void connectButtonPressed() { // TODO: 10/07/17 wmu16 - Finish function String ipAddress = ipTextField.getText().trim().toLowerCase(); - ClientToServerThread clientToServerThread = new ClientToServerThread(ipAddress, 4950); - controller.setClientToServerThread(clientToServerThread); - clientToServerThread.start(); - + 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) { diff --git a/src/main/java/seng302/gameServerWithThreading/MainServerThread.java b/src/main/java/seng302/gameServerWithThreading/MainServerThread.java index 226e1dc8..7ffb34d2 100644 --- a/src/main/java/seng302/gameServerWithThreading/MainServerThread.java +++ b/src/main/java/seng302/gameServerWithThreading/MainServerThread.java @@ -1,5 +1,9 @@ package seng302.gameServerWithThreading; +import java.util.Collection; +import java.util.Collections; +import javafx.application.Platform; +import seng302.controllers.LobbyController; import seng302.gameServer.GameStages; import seng302.gameServer.GameState; import seng302.models.stream.PacketBufferDelegate; @@ -19,11 +23,11 @@ import java.util.concurrent.PriorityBlockingQueue; public class MainServerThread extends Thread implements PacketBufferDelegate{ private static final int PORT = 4950; - private static final Integer MAX_NUM_PLAYERS = 1; + private static final Integer MAX_NUM_PLAYERS = 3; private ServerSocket serverSocket = null; private Socket socket; - private ArrayList serverToClientThreads = new ArrayList<>(); + private static ArrayList serverToClientThreads = new ArrayList<>(); private PriorityBlockingQueue packetBuffer; @@ -47,7 +51,6 @@ public class MainServerThread extends Thread implements PacketBufferDelegate{ } catch (InterruptedException e) { e.printStackTrace(); } - //LOBBYING if (GameState.getCurrentStage() == GameStages.LOBBYING && GameState.getPlayers().size() < MAX_NUM_PLAYERS) { try { @@ -58,6 +61,9 @@ public class MainServerThread extends Thread implements PacketBufferDelegate{ } ServerToClientThread thread = new ServerToClientThread(socket, this); serverToClientThreads.add(thread); + System.out.println("[SERVER]: Client found"); + // Platform.runLater() is used to update the UI from within a thread (found on stack overflow) + Platform.runLater(LobbyController::refreshCompetitors); thread.start(); } @@ -72,7 +78,7 @@ public class MainServerThread extends Thread implements PacketBufferDelegate{ } - updateClients(); +// updateClients(); while (!packetBuffer.isEmpty()){ System.out.println("WHATUPPP"); @@ -108,4 +114,13 @@ public class MainServerThread extends Thread implements PacketBufferDelegate{ System.out.println("HEY HI"); return packetBuffer.add(streamPacket); } + + + public static Collection getServerToClientThreads() { + Collection ips = new ArrayList<>(); + for (ServerToClientThread serverToClientThread: serverToClientThreads){ + ips.add(serverToClientThread.getName()); + } + return Collections.synchronizedCollection(ips); + } } diff --git a/src/main/resources/views/LobbyView.fxml b/src/main/resources/views/LobbyView.fxml index 803c2df1..4e413c61 100644 --- a/src/main/resources/views/LobbyView.fxml +++ b/src/main/resources/views/LobbyView.fxml @@ -15,7 +15,7 @@ - + @@ -41,6 +41,27 @@