-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathClientHandler.java
More file actions
97 lines (88 loc) · 3.31 KB
/
ClientHandler.java
File metadata and controls
97 lines (88 loc) · 3.31 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
package com.demo;
import java.io.*;
import java.net.*;
import java.util.List;
public class ClientHandler implements Runnable {
private Socket clientSocket;
private BufferedReader reader;
private PrintWriter writer;
private MessagingServer server;
private String username;
private boolean connected = true;
public ClientHandler(Socket socket, MessagingServer server) {
this.clientSocket = socket;
this.server = server;
try {
reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
writer = new PrintWriter(socket.getOutputStream(), true);
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public void run() {
try {
// Send recent messages to new client
List<ChatMessage> recentMessages = server.getRecentMessages();
try {
recentMessages = server.getRecentMessages();
} catch (Exception e) {
System.err.println("Failed to fetch recent messages: " + e.getMessage());
e.printStackTrace();
}
try {
for (ChatMessage msg : recentMessages) {
writer.println("HISTORY:" + msg.toString());
}} catch (Exception e) {
e.printStackTrace();
}
String inputLine;
while (connected && (inputLine = reader.readLine()) != null) {
if (inputLine.startsWith("USERNAME:")) {
username = inputLine.substring(9);
server.broadcastMessage("SYSTEM:" + username + " joined the chat", this);
} else if (inputLine.startsWith("MESSAGE:")) {
String message = inputLine.substring(8);
if (username != null) {
server.saveMessage(username, message);
String formattedMessage = "MESSAGE:" + username + ": " + message;
server.broadcastMessage(formattedMessage, this);
}
}
}
} catch (IOException e) {
if (connected) {
System.out.println("Client disconnected unexpectedly");
e.printStackTrace();
}
} catch (Exception e) {
System.err.println("Unexpected error in client handler: " + e.getMessage());
e.printStackTrace();
} finally {
disconnect();
}
}
public void sendMessage(String message) {
if (connected && writer != null) {
writer.println(message);
}
}
public boolean isConnected() {
return connected;
}
public void disconnect() {
connected = false;
try {
if (username != null) {
server.broadcastMessage("SYSTEM:" + username + " left the chat", this);
}
if (reader != null) reader.close();
if (writer != null) writer.close();
if (clientSocket != null) clientSocket.close();
} catch (IOException e) {
e.printStackTrace();
} finally {
server.removeClient(this);
}
}
}