153 lines
4.7 KiB
Java
153 lines
4.7 KiB
Java
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<ButtonType> 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<String> 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) {
|
|
// <TextField fx:id="messageInput" promptText="Type a message..." styleClass="message-input"/>
|
|
// <Button fx:id="sendButton" text="Send" styleClass="send-button"/>
|
|
Platform.runLater(() -> {
|
|
chatList.getChildren().clear();
|
|
chatInput.getChildren().clear();
|
|
Button leaveButton = new Button("Leave room");
|
|
leaveButton.setOnAction(event -> {
|
|
client.SendLeaveRoom();
|
|
chatList.getChildren().clear();
|
|
chatInput.getChildren().clear();
|
|
});
|
|
chatList.getChildren().add(leaveButton);
|
|
|
|
TextField messageInput = new TextField();
|
|
messageInput.setPromptText("Type a message...");
|
|
messageInput.getStyleClass().add("message-input");
|
|
messageInput.onActionProperty().set(event -> {
|
|
client.SendChatMessage(messageInput.getText());
|
|
messageInput.clear();
|
|
});
|
|
chatInput.getChildren().add(messageInput);
|
|
|
|
Button sendButton = new Button("Send");
|
|
sendButton.getStyleClass().add("send-button");
|
|
sendButton.setOnAction(event -> {
|
|
client.SendChatMessage(messageInput.getText());
|
|
messageInput.clear();
|
|
});
|
|
chatInput.getChildren().add(sendButton);
|
|
});
|
|
}
|
|
|
|
@Override
|
|
public void handleServerResponse(ServerResponsePacket.Response response) {
|
|
|
|
}
|
|
|
|
@Override
|
|
public void handleActualRoom(String roomName) {
|
|
|
|
}
|
|
}
|