/
itokar98
/
java-diplom-networkchat
Обзор
Документация
Войти
/
itokar98
/
java-diplom-networkchat
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
src/main/java/com/organization/service/ChatClientService.java
85 строк
3 KB
Ilya Tokar
First commit
21 дек 2025, 15:29
21 дек 2025, 15:29
3f8814c
Код
Авторство
О чём код?
package com.organization.service; import com.organization.config.ClientConfig; import com.organization.config.ClientConfigLoader; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.Socket; public class ChatClientService { private static final Logger logger = LogManager.getLogger(ChatClientService.class); private final ClientConfigLoader configLoader; public ChatClientService(ClientConfigLoader configLoader) { this.configLoader = configLoader; } public void start(String[] args) { ClientConfig config = configLoader.loadConfig(); String host = args.length > 0 ? args[0] : config.getHost(); int port = args.length > 1 ? Integer.parseInt(args[1]) : config.getPort(); try { connectAndChat(host, port); } catch (IOException e) { logger.error("Could not connect to server: ", e); } } private void connectAndChat(String host, int port) throws IOException { try ( Socket socket = new Socket(host, port); PrintWriter out = new PrintWriter(socket.getOutputStream(), true); BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream())); BufferedReader userInput = new BufferedReader(new InputStreamReader(System.in)) ) { String name = readUserName(userInput); logger.info("User '{}' connected to server at {}:{}", name, host, port); startMessageReceiver(in); processUserInput(name, userInput, out); } catch (IOException e) { logger.error("Error during chat session: ", e); throw e; } } String readUserName(BufferedReader userInput) throws IOException { System.out.print("Enter your name: "); String name = userInput.readLine(); return (name == null || name.trim().isEmpty()) ? "Anonymous" : name; } void startMessageReceiver(BufferedReader in) { Thread messageReceiver = new Thread(() -> { try { String message; while ((message = in.readLine()) != null) { System.out.println(message); logger.info("Received: {}", message); } } catch (IOException e) { logger.error("Connection closed by server: ", e); } }); messageReceiver.start(); } void processUserInput(String name, BufferedReader userInput, PrintWriter out) throws IOException { String input; while ((input = userInput.readLine()) != null) { if ("/exit".equals(input.trim())) { logger.info("User '{}' is exiting chat.", name); break; } out.println(name + ": " + input); logger.info("Sent: {}: {}", name, input); } } }