Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
5c08472b00 | ||
|
|
e01b255925 |
Generated
+1
-1
@@ -8,5 +8,5 @@
|
||||
</list>
|
||||
</option>
|
||||
</component>
|
||||
<component name="ProjectRootManager" version="2" project-jdk-name="21" project-jdk-type="JavaSDK" />
|
||||
<component name="ProjectRootManager" version="2" languageLevel="JDK_26" project-jdk-name="26" project-jdk-type="JavaSDK" />
|
||||
</project>
|
||||
@@ -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) {
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user