From fdbf6cc4fd589ca58fb34e6ada3a583407620fed Mon Sep 17 00:00:00 2001 From: Mahdi Date: Sat, 27 Jun 2026 05:40:31 +0330 Subject: [PATCH] implemate all class --- src/main/java/chat/ChatClient.java | 21 ++++++++++++++------- src/main/java/chat/ChatServer.java | 22 ++++++++++++++-------- src/main/java/chat/MessageListener.java | 10 ++++++++-- 3 files changed, 36 insertions(+), 17 deletions(-) diff --git a/src/main/java/chat/ChatClient.java b/src/main/java/chat/ChatClient.java index eb20460..1cc4c67 100644 --- a/src/main/java/chat/ChatClient.java +++ b/src/main/java/chat/ChatClient.java @@ -37,19 +37,26 @@ public class ChatClient { } private void connectToServer() throws IOException { - // TODO: create socket connection to host:port - // TODO: initialize output stream (PrintWriter) - // TODO: initialize input stream (BufferedReader) + socket = new Socket(this.host , this.port); + out = new PrintWriter(socket.getOutputStream() , true); + in = new BufferedReader(new InputStreamReader(socket.getInputStream())); } private void readUserInputAndSend() throws IOException { - // TODO: read continuously from console - // TODO: send each input line to server + String userInput; + while ((userInput = consoleReader.readLine()) != null){ + out.println(userInput); + } } private void cleanup() { - // TODO: close socket safely - // TODO: release resources + try { + if(socket != null && !socket.isClosed()) { + socket.close(); + } + } catch (IOException e) { + System.err.println("Error closeing client +" + e.getMessage()); + } } public static void main(String[] args) { diff --git a/src/main/java/chat/ChatServer.java b/src/main/java/chat/ChatServer.java index 218dbcd..0907f00 100644 --- a/src/main/java/chat/ChatServer.java +++ b/src/main/java/chat/ChatServer.java @@ -39,20 +39,26 @@ public class ChatServer { } public void broadcast(String message, ClientHandler sender) { - // step 1: iterate through connectedClients safely - // step 2: skip the sender client - // step 3: send message to remaining clients using sendMessage + synchronized (connectedClients){ + for(ClientHandler clientHandler : connectedClients){ + if(clientHandler != sender){ + clientHandler.sendMessage(message); + } + } + } } public void broadcastSystemMessage(String message) { - // step 1: iterate through all connected clients - // step 2: send system message to each client + synchronized (connectedClients){ + for(ClientHandler clientHandler : connectedClients){ + clientHandler.sendMessage(message); + } + } } public void removeClient(ClientHandler clientHandler) { - // step 1: remove client from connectedClients set - // step 2: retrieve username from clientHandler - // step 3: broadcast system message about user leaving + connectedClients.remove(clientHandler); + broadcastSystemMessage("[System]" + clientHandler.getUsername()+ "left th chat"); } public static void main(String[] args) { diff --git a/src/main/java/chat/MessageListener.java b/src/main/java/chat/MessageListener.java index 246256b..e2efc5f 100644 --- a/src/main/java/chat/MessageListener.java +++ b/src/main/java/chat/MessageListener.java @@ -13,7 +13,13 @@ public class MessageListener implements Runnable { @Override public void run() { - // TODO: continuously read messages from server - // TODO: print received messages immediately + try { + String message; + while ((message = inputReader.readLine()) != null){ + System.out.println(message); + } + }catch (IOException e){ + System.err.println(e.getMessage()); + } } } -- 2.54.0