package client; import javafx.application.Platform; import javafx.fxml.FXML; import javafx.scene.control.Alert; import javafx.scene.control.Button; import javafx.scene.control.ButtonType; import javafx.scene.control.TextField; import javafx.scene.layout.Border; import javafx.scene.layout.BorderPane; import javafx.scene.layout.HBox; import javafx.scene.layout.VBox; import javafx.stage.Stage; import network.protocol.packets.ServerResponsePacket; import java.net.InetSocketAddress; import java.net.SocketException; import java.time.Instant; import java.util.List; import java.util.Optional; public class ClientGuiController implements ClientListener { private Client client; private boolean connected = true; @FXML private BorderPane vueContainer; @FXML private VBox roomList; @FXML private VBox chatList; @FXML private HBox chatInput; public void setClient(Client client) { this.client = client; } @FXML public void initialize() throws SocketException { client = new Client(new InetSocketAddress("localhost", 6665), this, UsernameSingleton.getInstance().getUsername()); Platform.runLater(() -> { Stage stage = (Stage) vueContainer.getScene().getWindow(); stage.setOnCloseRequest(event -> { connected = false; client.close(); }); }); } @Override public void handleDisconnect() { System.out.println("Disconnected"); } @Override public void handleConnexionError() { if(connected) { Platform.runLater(() -> { Alert alert = new Alert(Alert.AlertType.ERROR); alert.setTitle("Connection"); alert.setHeaderText("Connection failed"); Optional res = alert.showAndWait(); if (res.isPresent() && res.get() == ButtonType.OK) { ((Stage) vueContainer.getScene().getWindow()).close(); } }); } } @Override public void handleConnect() { Platform.runLater(() -> { Alert alert = new Alert(Alert.AlertType.INFORMATION); alert.setTitle("Connection"); alert.setHeaderText("Connection to the server successful"); alert.showAndWait(); }); } @Override public void handleChatMessage(Instant time, String chatter, String content) { Platform.runLater(() -> { VBox msg = new VBox(); msg.getChildren().add(new TextField(chatter + " : " + content)); chatList.getChildren().add(msg); // chatList.getChildren().add() }); } @Override public void handleRoomList(List roomNames) { Platform.runLater(() -> { roomList.getChildren().clear(); for (String roomName : roomNames) { Button button = new Button(roomName); button.setOnAction(event -> { client.SendJoinRoom(roomName); createChatEnv(roomName); }); roomList.getChildren().add(button); } }); } private void createChatEnv(String roomName) { // //