Commit f6bfb3f5 authored by Trisha Gee's avatar Trisha Gee
Browse files

[Ch15] Separating the concerns of the server a bit better

parent 5f18b33d
Loading
Loading
Loading
Loading
+36 −25
Changes for src/main/java/ch15/SimpleChatServer.java: 36 added lines, 25 removed lines.
Original line number Diff line number Diff line
@@ -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());
@@ -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();
@@ -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