Multiple clients are now shown in lobby of host.

When multiple clients connect to the host, the lobby table now fills up with the names of the threads (will need to be changed later). Re-enabled multiple people connecting and the lobby table. Formatting changes in the lobby screen also made.

#story[1047]
This commit is contained in:
Kusal Ekanayake
2017-07-19 16:05:21 +12:00
parent b301ce5d27
commit dbbb41e12f
4 changed files with 72 additions and 14 deletions
@@ -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<String> competitorsIps = MainServerThread.getServerToClientThreads();
competitors.clear();
competitors.addAll(competitorsIps);
}
@FXML
public void readyButtonPressed() {
@@ -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) {
@@ -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<ServerToClientThread> serverToClientThreads = new ArrayList<>();
private static ArrayList<ServerToClientThread> serverToClientThreads = new ArrayList<>();
private PriorityBlockingQueue<StreamPacket> 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<String> ips = new ArrayList<>();
for (ServerToClientThread serverToClientThread: serverToClientThreads){
ips.add(serverToClientThread.getName());
}
return Collections.synchronizedCollection(ips);
}
}