From 456da1dd3d9e4011696133ebd900fbca7650ac67 Mon Sep 17 00:00:00 2001 From: ava Date: Sun, 21 Jun 2026 12:41:21 +0330 Subject: [PATCH] try to compelete workshop --- src/main/java/chat/ChatClient.java | 14 ++++++++++++++ src/main/java/chat/ChatServer.java | 14 ++++++++++++++ src/main/java/chat/MessageListener.java | 8 ++++++++ 3 files changed, 36 insertions(+) diff --git a/src/main/java/chat/ChatClient.java b/src/main/java/chat/ChatClient.java index eb20460..41f70d1 100644 --- a/src/main/java/chat/ChatClient.java +++ b/src/main/java/chat/ChatClient.java @@ -40,16 +40,30 @@ public class ChatClient { // TODO: create socket connection to host:port // TODO: initialize output stream (PrintWriter) // TODO: initialize input stream (BufferedReader) + socket = new Socket(host, 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 input; + while ((input = consoleReader.readLine()) != null) { + out.println(input); + } } 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 closing socket: " + 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..302596f 100644 --- a/src/main/java/chat/ChatServer.java +++ b/src/main/java/chat/ChatServer.java @@ -42,17 +42,31 @@ public class ChatServer { // 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 client : connectedClients) { + if (client != sender) { + client.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 client : connectedClients) { + client.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 the 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..4bfa8fe 100644 --- a/src/main/java/chat/MessageListener.java +++ b/src/main/java/chat/MessageListener.java @@ -15,5 +15,13 @@ public class MessageListener implements Runnable { 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("Connection lost: " + e.getMessage()); + } } }