diff --git a/.idea/misc.xml b/.idea/misc.xml
index f6a588b..b1ee00f 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -8,5 +8,5 @@
-
+
\ No newline at end of file
diff --git a/src/main/java/chat/ChatClient.java b/src/main/java/chat/ChatClient.java
index eb20460..cd707e6 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(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..56c4a8a 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 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..7fc2269 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("Connection lost: " + e.getMessage());
+ }
}
}