package com.vertsys; import java.io.*; import java.net.Socket; public class ServerThread extends Server implements Runnable{ private Socket sock; public ServerThread(Socket sock){ this.sock = sock; } @Override public void run() { if (DEBUG_MODE) System.out.println("New connection --> New Thread started."); if(DEBUG_MODE) System.out.println("Send all received messages to new client..."); try { ObjectOutputStream toNewClient = new ObjectOutputStream(sock.getOutputStream()); toNewClient.writeObject(messages); } catch (IOException e) { e.printStackTrace(); } while(!sock.isClosed()){ System.out.println("Still running..."); this.addMessage(); } if(DEBUG_MODE) System.out.println("Socket closed --> Joining Thread..."); } private void addMessage(){ String newMessage = ""; try { newMessage = readMessage(); } catch (IOException e) { e.printStackTrace(); } if (DEBUG_MODE) System.out.println("Add new Message..."); messages.add(newMessage); if(DEBUG_MODE) System.out.println(newMessage); String finalNewMessage = newMessage; clients.forEach(socket -> { DataOutputStream outgoing = null; try { outgoing = new DataOutputStream(socket.getOutputStream()); outgoing.writeBytes(finalNewMessage + "\n"); } catch (IOException e) { e.printStackTrace(); } }); } private String readMessage() throws IOException { BufferedReader incoming = new BufferedReader(new InputStreamReader(sock.getInputStream())); return incoming.readLine(); } }