/
itokar98
/
java-diplom-networkchat
Обзор
Документация
Войти
/
itokar98
/
java-diplom-networkchat
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
src/main/java/com/organization/server/ClientHandler.java
60 строк
2 KB
Ilya Tokar
First commit
21 дек 2025, 15:29
21 дек 2025, 15:29
3f8814c
Код
Авторство
О чём код?
package com.organization.server; import com.organization.service.MessageBroadcastService; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import java.io.*; import java.net.Socket; public class ClientHandler implements Runnable { private static final Logger logger = LogManager.getLogger(ClientHandler.class); private final Socket socket; private final MessageBroadcastService broadcastService; private PrintWriter out; public ClientHandler(Socket socket, MessageBroadcastService broadcastService) { this.socket = socket; this.broadcastService = broadcastService; } @Override public void run() { String clientAddress = socket.getInetAddress().getHostAddress(); try (InputStream input = socket.getInputStream(); BufferedReader in = new BufferedReader(new InputStreamReader(input)); OutputStream output = socket.getOutputStream()) { out = new PrintWriter(output, true); broadcastService.addClient(out); logger.info("Client connected: {}", clientAddress); String message; while ((message = in.readLine()) != null) { logger.info("Received from {}: {}", clientAddress, message); broadcastService.broadcastMessage(message, out); } } catch (IOException e) { logger.warn("Client disconnected unexpectedly: {}", clientAddress, e); } finally { cleanup(clientAddress); } } private void cleanup(String clientAddress) { if (out != null) { broadcastService.removeClient(out); logger.info("Client {} removed from broadcast list", clientAddress); } try { if (!socket.isClosed()) { socket.close(); } } catch (IOException e) { logger.error("Error closing socket for {}: ", clientAddress, e); } } }