simak-Olga / javajunior

0 stars 0 forks source link

Client.java #1

Open simak-Olga opened 9 months ago

simak-Olga commented 9 months ago

package ru.javajunior;

import java.io.*; import java.net.Socket; import java.util.Scanner;

public class Client { private final Socket socket; private final String name; private BufferedWriter bufferedWriter; private BufferedReader bufferedReader;

public Client(Socket socket, String userName){
    this.socket = socket;
    name = userName;
    try
    {
        bufferedWriter = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
        bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
    }
    catch (IOException e){
        closeEverything(socket, bufferedReader, bufferedWriter);
    }

}

/**
 * Слушатель для входящих сообщений
 */
public void listenForMessage(){
    new Thread(new Runnable() {
        @Override
        public void run() {
            String message;
            while (socket.isConnected()){
                try {
                    message = bufferedReader.readLine();
                    System.out.println(message);
                }
                catch (IOException e){
                    closeEverything(socket, bufferedReader, bufferedWriter);
                }
            }
        }
    }).start();
}

/**
 * Отправить сообщение
 */
public void sendMessage(){
    try {
        bufferedWriter.write(name);
        bufferedWriter.newLine();
        bufferedWriter.flush();

        Scanner scanner = new Scanner(System.in);
        while (socket.isConnected()) {
            String message = scanner.nextLine();
            bufferedWriter.write(name + ": " + message);
            bufferedWriter.newLine();
            bufferedWriter.flush();
        }
    } catch (IOException e){
        closeEverything(socket, bufferedReader, bufferedWriter);
    }
}

private void closeEverything(Socket socket, BufferedReader bufferedReader, BufferedWriter bufferedWriter){
    try {
        if (bufferedReader != null) {
            bufferedReader.close();
        }
        if (bufferedWriter != null) {
            bufferedWriter.close();
        }
        if (socket != null) {
            socket.close();
        }
    }
    catch (IOException e){
        e.printStackTrace();
    }
}

}