COMP2396
Loading...
Searching...
No Matches
Server.java
Go to the documentation of this file.
1import java.util.HashSet;
2import java.util.Scanner;
3import java.util.Set;
4import java.util.concurrent.Executors;
5import java.io.IOException;
6import java.io.PrintWriter;
7import java.net.ServerSocket;
8import java.net.Socket;
9
10public class Server {
11 private ServerSocket serverSocket;
13
14 // The set of all the print writers for all the clients, used for broadcast.
15 private Set<PrintWriter> writers = new HashSet<>();
16
17 public Server(ServerSocket serverSocket) {
18 this.serverSocket = serverSocket;
19 this.number = new SharedNumber();
20 }
21
22 public void start() {
23 var pool = Executors.newFixedThreadPool(200);
24 int clientCount = 0;
25 while (true) {
26 try {
27 Socket socket = serverSocket.accept();
28 pool.execute(new Handler(socket));
29 System.out.println("Connected to client " + clientCount++);
30 } catch (IOException e) {
31 e.printStackTrace();
32 }
33
34 }
35 }
36
37 public class Handler implements Runnable {
38 private Socket socket;
39 private Scanner input;
40 private PrintWriter output;
41
42 public Handler(Socket socket) {
43 this.socket = socket;
44 }
45
46 @Override
47 public void run() {
48 System.out.println("Connected: " + socket);
49 try {
50 input = new Scanner(socket.getInputStream());
51 output = new PrintWriter(socket.getOutputStream(), true);
52
53 // add this client to the broadcast list
54 writers.add(output);
55
56 while (input.hasNextLine()) {
57 var command = input.nextLine();
58
59 System.out.println("Server Received: " + command);
60
61 if (command.startsWith("UP")) {
62 number.up();
63 } else if (command.startsWith("DOWN")) {
64 number.down();
65 }
66
67 // broadcast updated number to all clients
68 for (PrintWriter writer : writers) {
69 writer.println(number.getNumber());
70 }
71
72 System.out.println("Server Broadcasted: " + number.getNumber());
73
74 }
75 } catch (Exception e) {
76 System.out.println(e.getMessage());
77 } finally {
78 // client disconnected
79 if (output != null) {
80 writers.remove(output);
81 }
82 }
83 }
84 }
85}
Socket socket
Definition Server.java:38
PrintWriter output
Definition Server.java:40
Scanner input
Definition Server.java:39
Handler(Socket socket)
Definition Server.java:42
Server(ServerSocket serverSocket)
Definition Server.java:17
ServerSocket serverSocket
Definition Server.java:11
SharedNumber number
Definition Server.java:12
void start()
Definition Server.java:22
Set< PrintWriter > writers
Definition Server.java:15
synchronized int getNumber()
synchronized void up()
synchronized void down()