package visualiser.Controllers; import javafx.collections.FXCollections; import javafx.collections.ObservableList; import javafx.fxml.FXML; import javafx.scene.control.Button; import javafx.scene.control.TableColumn; import javafx.scene.control.TableView; import javafx.scene.control.TextField; import visualiser.model.RaceConnection; import java.io.IOException; import java.net.Socket; /** * Controller for the Lobby for entering games */ public class LobbyController extends Controller { private @FXML TableView lobbyTable; private @FXML TableColumn gameNameColumn; private @FXML TableColumn hostNameColumn; private @FXML TableColumn statusColumn; private @FXML Button joinGameBtn; private @FXML TextField addressFld; private @FXML TextField portFld; private ObservableList connections; public void initialize() { // set up the connection table connections = FXCollections.observableArrayList(); //connections.add(new RaceConnection("localhost", 4942, "Local Game")); lobbyTable.setItems(connections); gameNameColumn.setCellValueFactory(cellData -> cellData.getValue().gamenameProperty()); hostNameColumn.setCellValueFactory(cellData -> cellData.getValue().hostnameProperty()); statusColumn.setCellValueFactory(cellData -> cellData.getValue().statusProperty()); lobbyTable.getSelectionModel().selectedItemProperty().addListener((obs, prev, curr) -> { if (curr != null && curr.statusProperty().getValue().equals("Ready")) { joinGameBtn.setDisable(false); } else { joinGameBtn.setDisable(true); } }); joinGameBtn.setDisable(true); } /** * Refreshes the connections in the lobby */ public void refreshBtnPressed(){ for(RaceConnection connection: connections) { connection.check(); } try { if (lobbyTable.getSelectionModel().getSelectedItem().statusProperty().getValue().equals("Ready")) { joinGameBtn.setDisable(false); } else { joinGameBtn.setDisable(true); } } catch (Exception ignored){} } /** * Connect to a connection. */ public void connectSocket() throws IOException { RaceConnection connection = lobbyTable.getSelectionModel().getSelectedItem(); Socket socket = new Socket(connection.getHostname(), connection.getPort()); RaceStartController rsc = (RaceStartController)loadScene("raceStart.fxml"); rsc.enterLobby(socket, false); } public void menuBtnPressed() throws IOException { loadScene("title.fxml"); } /** * adds a new connection */ public void addConnectionPressed(){ String hostName = addressFld.getText(); String portString = portFld.getText(); try { int port = Integer.parseInt(portString); connections.add(new RaceConnection(hostName, port, "Boat Game")); addressFld.clear(); portFld.clear(); } catch (NumberFormatException e) { System.err.println("Port number entered is not a number"); } } }