Loading src/main/java/ch15/SimpleChatServer.java +36 −25 Changes for src/main/java/ch15/SimpleChatServer.java: 36 added lines, 25 removed lines. Original line number Diff line number Diff line Loading @@ -9,13 +9,37 @@ import java.util.ArrayList; import java.util.Iterator; public class SimpleChatServer { ArrayList<PrintWriter> clientOutputStreams; public class ClientHandler implements Runnable { BufferedReader reader; Socket sock; public static void main(String[] args) { new SimpleChatServer().go(); } public void go() { try { ServerSocket serverSock = new ServerSocket(5000); Broadcaster broadcaster = new Broadcaster(); while (true) { Socket clientSocket = serverSock.accept(); PrintWriter writer = new PrintWriter(clientSocket.getOutputStream()); broadcaster.addClient(writer); ClientHandler clientHandler = new ClientHandler(clientSocket, broadcaster); Thread t = new Thread(clientHandler); t.start(); System.out.println("got a connection"); } } catch (Exception ex) { ex.printStackTrace(); } } // close go } // close class public ClientHandler(Socket clientSocket) { class ClientHandler implements Runnable { private BufferedReader reader; private Socket sock; private final Broadcaster broadcaster; public ClientHandler(Socket clientSocket, Broadcaster broadcaster) { this.broadcaster = broadcaster; try { sock = clientSocket; InputStreamReader isReader = new InputStreamReader(sock.getInputStream()); Loading @@ -30,34 +54,21 @@ public class SimpleChatServer { try { while ((message = reader.readLine()) != null) { System.out.println("read " + message); tellEveryone(message); broadcaster.tellEveryone(message); } // close while } catch (Exception ex) { ex.printStackTrace(); } } // close run } // close inner class public static void main(String[] args) { new SimpleChatServer().go(); } public void go() { clientOutputStreams = new ArrayList<>(); try { ServerSocket serverSock = new ServerSocket(5000); while (true) { Socket clientSocket = serverSock.accept(); PrintWriter writer = new PrintWriter(clientSocket.getOutputStream()); clientOutputStreams.add(writer); Thread t = new Thread(new ClientHandler(clientSocket)); t.start(); System.out.println("got a connection"); } } catch (Exception ex) { ex.printStackTrace(); class Broadcaster { private final ArrayList<PrintWriter> clientOutputStreams = new ArrayList<>(); void addClient(PrintWriter clientOutputStream) { clientOutputStreams.add(clientOutputStream); } } // close go public void tellEveryone(String message) { Iterator<PrintWriter> it = clientOutputStreams.iterator(); Loading @@ -71,4 +82,4 @@ public class SimpleChatServer { } } // end while } // close tellEveryone } // close class No newline at end of file } No newline at end of file Loading
src/main/java/ch15/SimpleChatServer.java +36 −25 Changes for src/main/java/ch15/SimpleChatServer.java: 36 added lines, 25 removed lines. Original line number Diff line number Diff line Loading @@ -9,13 +9,37 @@ import java.util.ArrayList; import java.util.Iterator; public class SimpleChatServer { ArrayList<PrintWriter> clientOutputStreams; public class ClientHandler implements Runnable { BufferedReader reader; Socket sock; public static void main(String[] args) { new SimpleChatServer().go(); } public void go() { try { ServerSocket serverSock = new ServerSocket(5000); Broadcaster broadcaster = new Broadcaster(); while (true) { Socket clientSocket = serverSock.accept(); PrintWriter writer = new PrintWriter(clientSocket.getOutputStream()); broadcaster.addClient(writer); ClientHandler clientHandler = new ClientHandler(clientSocket, broadcaster); Thread t = new Thread(clientHandler); t.start(); System.out.println("got a connection"); } } catch (Exception ex) { ex.printStackTrace(); } } // close go } // close class public ClientHandler(Socket clientSocket) { class ClientHandler implements Runnable { private BufferedReader reader; private Socket sock; private final Broadcaster broadcaster; public ClientHandler(Socket clientSocket, Broadcaster broadcaster) { this.broadcaster = broadcaster; try { sock = clientSocket; InputStreamReader isReader = new InputStreamReader(sock.getInputStream()); Loading @@ -30,34 +54,21 @@ public class SimpleChatServer { try { while ((message = reader.readLine()) != null) { System.out.println("read " + message); tellEveryone(message); broadcaster.tellEveryone(message); } // close while } catch (Exception ex) { ex.printStackTrace(); } } // close run } // close inner class public static void main(String[] args) { new SimpleChatServer().go(); } public void go() { clientOutputStreams = new ArrayList<>(); try { ServerSocket serverSock = new ServerSocket(5000); while (true) { Socket clientSocket = serverSock.accept(); PrintWriter writer = new PrintWriter(clientSocket.getOutputStream()); clientOutputStreams.add(writer); Thread t = new Thread(new ClientHandler(clientSocket)); t.start(); System.out.println("got a connection"); } } catch (Exception ex) { ex.printStackTrace(); class Broadcaster { private final ArrayList<PrintWriter> clientOutputStreams = new ArrayList<>(); void addClient(PrintWriter clientOutputStream) { clientOutputStreams.add(clientOutputStream); } } // close go public void tellEveryone(String message) { Iterator<PrintWriter> it = clientOutputStreams.iterator(); Loading @@ -71,4 +82,4 @@ public class SimpleChatServer { } } // end while } // close tellEveryone } // close class No newline at end of file } No newline at end of file