Added server list updates, and added lobby

- Server list updates when a server is added/removed
- Player can host a server
- Lobby view shows players connected

Tags: #pair[mra106, hyi25] #story[1245]
This commit is contained in:
Michael Rausch
2017-09-07 19:20:36 +12:00
parent 8cc725616c
commit b35126ff4e
13 changed files with 280 additions and 170 deletions
@@ -5,7 +5,9 @@ import com.jfoenix.controls.JFXDialog;
import com.jfoenix.controls.JFXDialog.DialogTransition;
import java.io.IOException;
import java.net.URL;
import java.util.List;
import java.util.ResourceBundle;
import com.jfoenix.controls.JFXTextField;
import javafx.application.Platform;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
@@ -13,42 +15,49 @@ import javafx.fxml.Initializable;
import javafx.scene.control.ScrollPane;
import javafx.scene.layout.StackPane;
import javafx.scene.layout.VBox;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import seng302.gameServer.ServerDescription;
import seng302.visualiser.ServerListener;
import seng302.visualiser.ServerListenerDelegate;
public class ServerListController implements Initializable {
public class ServerListController implements Initializable, ServerListenerDelegate {
//--------FXML BEGIN--------//
// Layout Related
@FXML
private VBox serverListVBox;
@FXML
private ScrollPane serverListScrollPane;
@FXML
private StackPane serverListMainStackPane;
// Host Button
@FXML
private JFXButton serverListHostButton;
private void refreshServerList(){
//Direct Connect
@FXML
private JFXButton connectButton;
@FXML
private JFXTextField serverHostName;
@FXML
private JFXTextField serverPortNumber;
//---------FXML END---------//
}
private Logger logger = LoggerFactory.getLogger(ServerListController.class);
public void initialize(URL location, ResourceBundle resources) {
serverListVBox.minWidthProperty().bind(serverListScrollPane.widthProperty());
// for (int i = 0; i < 20; i++) {
// VBox pane = null;
//
// FXMLLoader loader = new FXMLLoader(
// getClass().getResource("/views/cells/ServerCell.fxml"));
//
// loader.setController(new ServerCell("Server " + i));
//
// try {
// pane = loader.load();
// } catch (IOException e) {
// e.printStackTrace();
// }
//
// serverListVBox.getChildren().add(pane);
// }
connectButton.setOnMouseReleased(event -> goToDirectConnectLobby());
try {
ServerListener.getInstance().setDelegate(this);
} catch (IOException e) {
logger.warn("Could not start Server Listener Delegate");
}
Platform.runLater(() -> {
FXMLLoader dialogContent = new FXMLLoader(getClass().getResource(
@@ -59,8 +68,49 @@ public class ServerListController implements Initializable {
DialogTransition.CENTER);
serverListHostButton.setOnAction(action -> dialog.show());
} catch (IOException e) {
e.printStackTrace();
logger.warn("Could not create Server Creation Dialog.");
}
});
}
private void goToDirectConnectLobby() {
// TODO: 7/09/17 ajm412: Implement ability to connect to a lobby.
serverHostName.setText("Invalid Host Name or Port Number");
serverPortNumber.setText("");
}
@Override
public void serverRemoved(List<ServerDescription> servers) {
Platform.runLater(() -> refreshServers(servers));
}
@Override
public void serverDetected(ServerDescription serverDescription, List<ServerDescription> servers) {
Platform.runLater(() -> refreshServers(servers));
}
private void refreshServers(List<ServerDescription> servers) {
// TODO: 7/09/17 ajm412: Add some way to force a refresh.
// TODO: 7/09/17 ajm412: Add something for No Servers Found.
serverListVBox.getChildren().clear();
// Populate the server list with a series of server cell objects.
for (ServerDescription server : servers){
VBox pane = null;
FXMLLoader loader = new FXMLLoader(
getClass().getResource("/views/cells/ServerCell.fxml"));
loader.setController(new ServerCell(server));
try {
pane = loader.load();
} catch (IOException e) {
e.printStackTrace();
}
serverListVBox.getChildren().add(pane);
}
}
}