From 07272732d401f4be4ac3a506ae33b9ade3611109 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment?= Date: Mon, 10 Mar 2025 13:52:35 +0100 Subject: [PATCH] Pass Client & ClientListener through all controllers --- ChatApp/app/src/main/java/ChatAppClient.java | 2 +- ChatApp/app/src/main/java/client/Client.java | 7 ++- .../src/main/java/client/ClientConnexion.java | 5 +- .../main/java/client/ClientGuiController.java | 52 +++++++++++++++++- .../src/main/java/client/ClientLoading.java | 54 ++++++++++++++++++- .../app/src/main/java/client/ClientLogin.java | 6 ++- .../app/src/main/java/network/PacketPool.java | 4 +- .../src/main/resources/client/clientStyle.css | 8 ++- .../src/main/resources/client/clientVue.fxml | 52 +++++++++--------- 9 files changed, 154 insertions(+), 36 deletions(-) diff --git a/ChatApp/app/src/main/java/ChatAppClient.java b/ChatApp/app/src/main/java/ChatAppClient.java index a0f5f26..f8f8ade 100644 --- a/ChatApp/app/src/main/java/ChatAppClient.java +++ b/ChatApp/app/src/main/java/ChatAppClient.java @@ -4,7 +4,7 @@ import java.net.InetSocketAddress; public class ChatAppClient { public static void main(String[] args) { - ClientConsole console = new ClientConsole(new InetSocketAddress("localhost", 6665)); + ClientConsole console = new ClientConsole(new InetSocketAddress("192.168.163.131", 6665)); try { console.joinThread(); } catch (InterruptedException e) { diff --git a/ChatApp/app/src/main/java/client/Client.java b/ChatApp/app/src/main/java/client/Client.java index 2644bbf..e60ef84 100644 --- a/ChatApp/app/src/main/java/client/Client.java +++ b/ChatApp/app/src/main/java/client/Client.java @@ -9,7 +9,7 @@ import network.protocol.packets.*; public class Client { private final ClientConnexion connexion; - private final ClientListener callback; + private ClientListener callback; public Client(InetSocketAddress serverAddress, ClientListener callback, String pseudo) throws SocketException { this.connexion = new ClientConnexion(new Socket(), serverAddress, callback); @@ -50,4 +50,9 @@ public class Client { public void RequestActualRoom() { this.connexion.sendPacket(new RequestActualRoomPacket()); } + + public void changeCallback(ClientListener callback) { + this.callback = callback; + this.connexion.changeCallback(callback); + } } diff --git a/ChatApp/app/src/main/java/client/ClientConnexion.java b/ChatApp/app/src/main/java/client/ClientConnexion.java index a664d7f..f664170 100644 --- a/ChatApp/app/src/main/java/client/ClientConnexion.java +++ b/ChatApp/app/src/main/java/client/ClientConnexion.java @@ -14,7 +14,7 @@ public class ClientConnexion implements PacketVisitor, PacketHandler { private final InetSocketAddress serverAddress; private final Socket socket; - private final ClientListener callback; + private ClientListener callback; public ClientConnexion(Socket socket, InetSocketAddress serverAddress, ClientListener callback) { this.serverAddress = serverAddress; @@ -111,4 +111,7 @@ public class ClientConnexion implements PacketVisitor, PacketHandler { throw new UnsupportedOperationException("Unimplemented method 'visitPacket'"); } + public void changeCallback(ClientListener callback) { + this.callback = callback; + } } diff --git a/ChatApp/app/src/main/java/client/ClientGuiController.java b/ChatApp/app/src/main/java/client/ClientGuiController.java index d9c6c24..ad58c92 100644 --- a/ChatApp/app/src/main/java/client/ClientGuiController.java +++ b/ChatApp/app/src/main/java/client/ClientGuiController.java @@ -1,6 +1,56 @@ package client; import javafx.fxml.FXML; +import network.protocol.packets.ServerResponsePacket; -public class ClientGuiController { +import java.time.Instant; +import java.util.List; + +public class ClientGuiController implements ClientListener { + + private Client client; + + public void setClient(Client client) { + this.client = client; + } + + @FXML + public void initialize() { + + } + + @Override + public void handleDisconnect() { + + } + + @Override + public void handleConnexionError() { + + } + + @Override + public void handleConnect() { + + } + + @Override + public void handleChatMessage(Instant time, String chatter, String content) { + + } + + @Override + public void handleRoomList(List roomNames) { + + } + + @Override + public void handleServerResponse(ServerResponsePacket.Response response) { + + } + + @Override + public void handleActualRoom(String roomName) { + + } } diff --git a/ChatApp/app/src/main/java/client/ClientLoading.java b/ChatApp/app/src/main/java/client/ClientLoading.java index cb98540..6766a45 100644 --- a/ChatApp/app/src/main/java/client/ClientLoading.java +++ b/ChatApp/app/src/main/java/client/ClientLoading.java @@ -7,14 +7,20 @@ import javafx.scene.Scene; import javafx.scene.shape.Arc; import javafx.stage.Stage; import javafx.util.Duration; +import network.protocol.packets.ServerResponsePacket; import java.io.IOException; +import java.time.Instant; +import java.util.List; + import static utilities.FxUtilities.centerStage; -public class ClientLoading { +public class ClientLoading implements ClientListener { @FXML private Arc spinnerArc; + private Client client; + public void initialize() throws IOException, InterruptedException { // Création de l'animation de rotation RotateTransition rotate = new RotateTransition(Duration.seconds(1), spinnerArc); @@ -23,11 +29,57 @@ public class ClientLoading { rotate.play(); } + public void setClient(Client client) { + this.client = client; + } + public void login() throws IOException { var loader = new FXMLLoader(getClass().getResource("/client/clientVue.fxml")); loader.load(); + client.changeCallback(loader.getController()); + ((ClientGuiController) loader.getController()).setClient(client); Stage stage = (Stage) spinnerArc.getScene().getWindow(); stage.setScene(new Scene(loader.getRoot(), 800, 600)); centerStage(stage); + stage.getScene().getStylesheets().add(getClass().getResource("clientStyle.css").toExternalForm()); + } + + @Override + public void handleDisconnect() { + System.out.println("Disconnected"); + } + + @Override + public void handleConnexionError() { + System.out.println("Connection error"); + } + + @Override + public void handleConnect() { + try { + login(); + } catch (IOException e) { + e.printStackTrace(); + } + } + + @Override + public void handleChatMessage(Instant time, String chatter, String content) { + + } + + @Override + public void handleRoomList(List roomNames) { + + } + + @Override + public void handleServerResponse(ServerResponsePacket.Response response) { + + } + + @Override + public void handleActualRoom(String roomName) { + } } diff --git a/ChatApp/app/src/main/java/client/ClientLogin.java b/ChatApp/app/src/main/java/client/ClientLogin.java index 9838c1d..807456d 100644 --- a/ChatApp/app/src/main/java/client/ClientLogin.java +++ b/ChatApp/app/src/main/java/client/ClientLogin.java @@ -7,6 +7,7 @@ import javafx.scene.control.TextField; import javafx.stage.Stage; import client.ClientGui; import java.io.IOException; +import java.net.InetSocketAddress; import static utilities.FxUtilities.centerStage; @@ -16,11 +17,14 @@ public class ClientLogin { @FXML private void login() throws IOException { - if(usernameField.getText().isEmpty()) { + String username = usernameField.getText(); + if(username.isEmpty()) { return; } var loader = new FXMLLoader(getClass().getResource("/client/clientLoading.fxml")); + Client client = new Client(new InetSocketAddress("localhost", 6665), loader.getController(), username); loader.load(); + ((ClientLoading) loader.getController()).setClient(client); Stage stage = (Stage) usernameField.getScene().getWindow(); stage.setScene(new Scene(loader.getRoot(), 800, 600)); centerStage(stage); diff --git a/ChatApp/app/src/main/java/network/PacketPool.java b/ChatApp/app/src/main/java/network/PacketPool.java index 43ea728..65869ef 100644 --- a/ChatApp/app/src/main/java/network/PacketPool.java +++ b/ChatApp/app/src/main/java/network/PacketPool.java @@ -23,9 +23,9 @@ public class PacketPool { private final Socket socket; private static int MAX_SEND_TRY = 50; - private static long SEND_DELAY = 100; + private static long SEND_DELAY = 10; private static long RETRY_INTERVAL = SEND_DELAY * 2; - private static float PACKET_LOSS_PROBABILITY = 0.5f; + private static float PACKET_LOSS_PROBABILITY = 0.1f; private static record ReliablePacketAddress(ReliablePacket packet, InetSocketAddress address) { @Override diff --git a/ChatApp/app/src/main/resources/client/clientStyle.css b/ChatApp/app/src/main/resources/client/clientStyle.css index b3a8918..48bc5cb 100644 --- a/ChatApp/app/src/main/resources/client/clientStyle.css +++ b/ChatApp/app/src/main/resources/client/clientStyle.css @@ -1,4 +1,4 @@ -.login-box { +.login-box, .logo-box, .rooms-list, .chat-list { -fx-background-color: lightgray; } @@ -8,4 +8,10 @@ .login:focused { -fx-border-color: lightgrey; +} + +.rooms-label { + -fx-font-size: 18px; + -fx-padding: 10px; + -fx-background-color: lightgray; } \ No newline at end of file diff --git a/ChatApp/app/src/main/resources/client/clientVue.fxml b/ChatApp/app/src/main/resources/client/clientVue.fxml index 9821bc5..75f9f45 100644 --- a/ChatApp/app/src/main/resources/client/clientVue.fxml +++ b/ChatApp/app/src/main/resources/client/clientVue.fxml @@ -9,37 +9,35 @@ - - - - - - - + prefHeight="400.0" prefWidth="600.0" styleClass="vue-container" fx:id="vueContainer"> + + + + + - - - - - - - - - - - - - + + + + + + +
+ + + +
+ \ No newline at end of file