diff --git a/assignments/src/MV3500Cohort2024JulySeptember/homework2/Bavlsik/BavlsikServer.java b/assignments/src/MV3500Cohort2024JulySeptember/homework2/Bavlsik/BavlsikServer.java index f85726625f3bf3ec0bd29fd59f52f562a67cc2b6..8119fcbe2980ccbcbfb6cebb18c1fd07d5759dfd 100644 --- a/assignments/src/MV3500Cohort2024JulySeptember/homework2/Bavlsik/BavlsikServer.java +++ b/assignments/src/MV3500Cohort2024JulySeptember/homework2/Bavlsik/BavlsikServer.java @@ -9,6 +9,8 @@ import java.io.PrintWriter; import java.net.InetAddress; import java.net.ServerSocket; import java.net.Socket; +import java.util.ArrayList; +import java.util.Arrays; import java.util.HashSet; import java.util.Set; @@ -17,6 +19,7 @@ import java.util.Set; * @author tbavlsik */ public class BavlsikServer { + // the set clientWriters contains form all sockets the active PrintStream private static Set<PrintWriter> clientWriters = new HashSet<>(); @@ -24,25 +27,38 @@ public class BavlsikServer { * @param args the command line arguments */ public static void main(String[] args) { + ArrayList passcodes = new ArrayList<>(Arrays.asList(1, 29, 97)); System.out.println(BavlsikServer.class.getName() + " has started..."); // it helps debugging to put this on console first - try (ServerSocket listener = new ServerSocket(2317)) { + try (ServerSocket listener = new ServerSocket(2317)) { while (true) { Handler handler = new Handler(listener.accept()); // create a new thread writing and reading to and from the new socket OutputStream os = handler.socket.getOutputStream(); PrintStream ps = new PrintStream(os); - + InetAddress remoteAddress = handler.socket.getInetAddress(); int remotePort = handler.socket.getPort(); + String message = remoteAddress.getHostName() + "=" + remoteAddress.getHostAddress() + ", " + remotePort + " has connected to the server."; System.out.println(message); - ps.println("Welcome " + remoteAddress.getHostName() + "=" + remoteAddress.getHostAddress() + ", " + remotePort + " to the group chat!"); - for (PrintWriter writer : clientWriters) { + BufferedReader reader = new BufferedReader(new InputStreamReader(handler.socket.getInputStream())); + ps.println("Enter a passcode:"); + String passInput = reader.readLine(); // read the entire line as a string + + int pass = Integer.parseInt(passInput.trim()); + + if (passcodes.contains(pass)) { + ps.println("Welcome " + remoteAddress.getHostName() + "=" + remoteAddress.getHostAddress() + ", " + remotePort + " to the group chat!"); + for (PrintWriter writer : clientWriters) { writer.println(message); } - ps.flush(); - handler.start(); + ps.flush(); + handler.start(); + } else { + ps.println("Not a valid passcode."); + handler.socket.close(); + } } - }catch (IOException e) { + } catch (IOException e) { System.err.println("Problem with " + BavlsikServer.class.getName() + " networking: " + e); // Provide more helpful information to user if exception occurs due to running twice at one time @@ -50,10 +66,11 @@ public class BavlsikServer { System.err.println("*** Be sure to stop any other running instances of programs using this port!"); } } - + } - + private static class Handler extends Thread { + public final Socket socket; private PrintWriter out; private BufferedReader in; @@ -74,7 +91,7 @@ public class BavlsikServer { String message; while ((message = in.readLine()) != null) { - String outputMessage = socket.getInetAddress().getHostName() + "=" + socket.getInetAddress().getHostAddress() + ", " + socket.getPort()+ ": " + message; + String outputMessage = socket.getInetAddress().getHostName() + "=" + socket.getInetAddress().getHostAddress() + ", " + socket.getPort() + ": " + message; System.out.println(outputMessage); for (PrintWriter writer : clientWriters) { writer.println(outputMessage); @@ -95,5 +112,5 @@ public class BavlsikServer { } } } - + }