added main components for joining and leaving rooms

This commit is contained in:
Clément
2025-03-12 15:29:03 +01:00
parent 2be11ec4a8
commit 11fc2e2ac8
2 changed files with 60 additions and 2 deletions

View File

@@ -3,8 +3,12 @@ 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.VBox;
import javafx.stage.Stage;
import network.protocol.packets.ServerResponsePacket;
@@ -12,14 +16,23 @@ 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;
public void setClient(Client client) {
this.client = client;
}
@@ -42,8 +55,15 @@ public void initialize() throws SocketException {
@Override
public void handleConnexionError() {
System.out.println("Connection error");
System.out.println(UsernameSingleton.getInstance().getUsername());
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
@@ -62,7 +82,44 @@ public void initialize() throws SocketException {
@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();
Button leaveButton = new Button("Leave room");
leaveButton.setOnAction(event -> {
client.SendLeaveRoom();
chatList.getChildren().clear();
});
chatList.getChildren().add(leaveButton);
TextField messageInput = new TextField();
messageInput.setPromptText("Type a message...");
messageInput.getStyleClass().add("message-input");
chatList.getChildren().add(messageInput);
Button sendButton = new Button("Send");
sendButton.getStyleClass().add("send-button");
sendButton.setOnAction(event -> {
client.SendChatMessage(messageInput.getText());
messageInput.clear();
});
chatList.getChildren().add(sendButton);
});
}
@Override

View File

@@ -37,6 +37,7 @@
<VBox fx:id="chat" spacing="10.0">
<Label text="Chat" style="-fx-font-size: 18px;"/>
<VBox fx:id="chatList" styleClass="chat-list" spacing="5.0"/>
<HBox fx:id="chatInput" styleClass="chat-input" spacing="5.0" />
</VBox>
</ScrollPane>
</center>