From c1e9602b35b174f9d244437fcdd886158fcc67d1 Mon Sep 17 00:00:00 2001 From: GabrieleRadice <265572328+GabrieleRadice@users.noreply.github.com> Date: Sat, 18 Apr 2026 19:17:55 +0200 Subject: [PATCH] Add: Added Partial Logic For Client Connection Handling And Termination In TCPServer.java. --- .../Network/TCP/Server/ClientHandler.java | 25 ++++++++++++------- .../gc14/Network/TCP/Server/TCPServer.java | 11 +++++--- 2 files changed, 23 insertions(+), 13 deletions(-) diff --git a/src/main/java/it/polimi/ingsw/gc14/Network/TCP/Server/ClientHandler.java b/src/main/java/it/polimi/ingsw/gc14/Network/TCP/Server/ClientHandler.java index a599d19..7000c31 100644 --- a/src/main/java/it/polimi/ingsw/gc14/Network/TCP/Server/ClientHandler.java +++ b/src/main/java/it/polimi/ingsw/gc14/Network/TCP/Server/ClientHandler.java @@ -12,37 +12,44 @@ public class ClientHandler implements Runnable { PrintWriter out = null; List clientHandlers; GameController gameController; + public ClientHandler(Socket clientSocket, List clientHandlers, GameController gameController) { this.clientSocket = clientSocket; this.clientHandlers = clientHandlers; this.gameController = gameController; } + @Override - public void run() { + public void run(){ clientLoop(); } - private void clientLoop() { - try { + + private void clientLoop(){ + try{ in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream())); - synchronized (out) { + synchronized(out){ out = new PrintWriter(clientSocket.getOutputStream(), true); } - } catch (IOException e) { + } + catch(IOException e){ e.printStackTrace(); } String s = ""; try{ while ((s = in.readLine()) != null) { - System.out.println(s); - out.println(s.toUpperCase()); + synchronized(out){ + System.out.println(s); + out.println(s.toUpperCase()); + } } } catch (IOException e) { e.printStackTrace(); } } - private void notifyEvent(Object event) { - synchronized (out) { + + public void notifyEvent(Object event) { + synchronized(out){ out.println(event.toString()); } } diff --git a/src/main/java/it/polimi/ingsw/gc14/Network/TCP/Server/TCPServer.java b/src/main/java/it/polimi/ingsw/gc14/Network/TCP/Server/TCPServer.java index 8a4fe3b..7cafb9e 100644 --- a/src/main/java/it/polimi/ingsw/gc14/Network/TCP/Server/TCPServer.java +++ b/src/main/java/it/polimi/ingsw/gc14/Network/TCP/Server/TCPServer.java @@ -37,16 +37,15 @@ public class TCPServer { try{ clientSocket = serverTCP.accept(); - if(!gameController.addPlayer(clientSocket.getInputStream().toString()) || ConnectedPlayers >= clientHandlers.size()){ + if(!gameController.addPlayer(clientSocket.getInputStream().toString()) || ConnectedPlayers > gameController.getModel().getNPlayers()){ clientSocket.close(); - System.out.println("Player already present or username is invalid. Connection terminated.\n"); + System.out.println("Invalid parameters. Connection terminated.\n"); } } catch (IOException e){ e.printStackTrace(); } - System.out.println("Accepted"); ConnectedPlayers++; ClientHandler clientHandler = new ClientHandler(clientSocket, clientHandlers, gameController); @@ -56,8 +55,12 @@ public class TCPServer { } } - private TCPServer(GameController gameController, int port) { + private TCPServer(GameController gameController, int port){ this.port = port; this.gameController = gameController; } + + public void broadcastUpdate(Object event){ + clientHandlers.forEach((x) -> x.notifyEvent(event)); + } }