import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.net.Socket; import java.util.ArrayList; import java.util.List; public class ClientHandle implements Runnable { private BufferedReader bufferedReader; private BufferedWriter bufferedWriter; private Socket socket; private String clientUserName; public static List clientHandlers = new ArrayList<>(); public ClientHandle(Socket socket) { try { this.socket = socket; this.bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream())); this.bufferedWriter = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())); this.clientUserName = bufferedReader.readLine(); clientHandlers.add(this); boardcastMessage("User " + clientUserName + " joined the chat!"); } catch (IOException e) { closeEveryThing(bufferedReader, bufferedWriter, socket); } } public void boardcastMessage(String msgToSend) { for (ClientHandle clientHandler : clientHandlers) { // if (!clientHandle.clientUserName.equals(clientUserName)) { try { clientHandler.bufferedWriter.write(msgToSend); clientHandler.bufferedWriter.newLine(); clientHandler.bufferedWriter.flush(); } catch (IOException e) { closeEveryThing(bufferedReader, bufferedWriter, socket); } // } } } @Override public void run() { String messageFromClient = ""; while (socket.isConnected()) { try { messageFromClient = bufferedReader.readLine(); boardcastMessage(messageFromClient); } catch(IOException e) { closeEveryThing(bufferedReader, bufferedWriter, socket); break; } } } public void closeEveryThing(BufferedReader in, BufferedWriter out, Socket socket) { removeClientHandler(); try { if (in != null) in.close(); if (out != null) out.close(); if (socket != null) socket.close(); } catch (IOException e) { e.printStackTrace(); } } public void removeClientHandler() { clientHandlers.remove(this); boardcastMessage("User " + clientUserName + " has left the chat!"); } }