forked from AdvancedProgramming1404/WS-09-Network
init project
This commit is contained in:
@@ -0,0 +1,78 @@
|
||||
package chat;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStreamReader;
|
||||
import java.io.PrintWriter;
|
||||
import java.net.Socket;
|
||||
|
||||
public class ClientHandler implements Runnable {
|
||||
|
||||
private final Socket clientSocket;
|
||||
private final ChatServer chatServer;
|
||||
private PrintWriter out;
|
||||
private BufferedReader in;
|
||||
private String username;
|
||||
|
||||
public ClientHandler(Socket clientSocket, ChatServer chatServer) {
|
||||
this.clientSocket = clientSocket;
|
||||
this.chatServer = chatServer;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
try {
|
||||
setupStreams();
|
||||
requestUsername();
|
||||
announceJoin();
|
||||
listenForMessages();
|
||||
} catch (IOException e) {
|
||||
System.err.println("Client handler error: " + e.getMessage());
|
||||
} finally {
|
||||
cleanup();
|
||||
}
|
||||
}
|
||||
|
||||
private void setupStreams() throws IOException {
|
||||
out = new PrintWriter(clientSocket.getOutputStream(), true);
|
||||
in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
|
||||
}
|
||||
|
||||
private void requestUsername() throws IOException {
|
||||
out.println("Enter your username:");
|
||||
username = in.readLine();
|
||||
if (username == null || username.trim().isEmpty()) {
|
||||
username = "Anonymous";
|
||||
}
|
||||
}
|
||||
|
||||
private void announceJoin() {
|
||||
chatServer.broadcastSystemMessage("[System] " + username + " joined the chat.");
|
||||
}
|
||||
|
||||
private void listenForMessages() throws IOException {
|
||||
String message;
|
||||
while ((message = in.readLine()) != null) {
|
||||
chatServer.broadcast(username + ": " + message, this);
|
||||
}
|
||||
}
|
||||
|
||||
private void cleanup() {
|
||||
chatServer.removeClient(this);
|
||||
try {
|
||||
if (clientSocket != null && !clientSocket.isClosed()) {
|
||||
clientSocket.close();
|
||||
}
|
||||
} catch (IOException e) {
|
||||
System.err.println("Error closing socket: " + e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
public void sendMessage(String message) {
|
||||
out.println(message);
|
||||
}
|
||||
|
||||
public String getUsername() {
|
||||
return username;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user