From c177a1bb65f239d0a6ace32e8c902cc943541343 Mon Sep 17 00:00:00 2001
From: owner <owner@DESKTOP-150HAJJ.ern.nps.edu>
Date: Thu, 8 Aug 2024 16:59:00 -0700
Subject: [PATCH] Homework 2

---
 .../homework2/Lennon/LennonHW2Client.java     | 41 ++++++++++++++++---
 .../Lennon/LennonHW2HandlerThread.java        | 21 +++++++++-
 2 files changed, 54 insertions(+), 8 deletions(-)

diff --git a/assignments/src/MV3500Cohort2024JulySeptember/homework2/Lennon/LennonHW2Client.java b/assignments/src/MV3500Cohort2024JulySeptember/homework2/Lennon/LennonHW2Client.java
index 80cf6a753c..de4a93dd00 100644
--- a/assignments/src/MV3500Cohort2024JulySeptember/homework2/Lennon/LennonHW2Client.java
+++ b/assignments/src/MV3500Cohort2024JulySeptember/homework2/Lennon/LennonHW2Client.java
@@ -68,18 +68,47 @@ public class LennonHW2Client
                 BufferedReader br = new BufferedReader(isr);
 
                 String serverMessage = br.readLine(); // blocks
-                long readTime = System.currentTimeMillis();
-                long timeLength = readTime - startTime;
+                System.out.println("Message from server:" + serverMessage);
+                String guess = null;
+                boolean validGuess = false;
+                while(!validGuess){
+                    guess = scanner.nextLine();
+                    try{
+                        int numGuess = Integer.parseInt(guess);
+                        if (numGuess < 1 || numGuess > 10){
+                            System.out.println("I said between 1 and 10. Guess Again");
+                            continue;
+                        }
+                        validGuess = true;
+                    }
+                    catch(NumberFormatException e){
+                        System.out.println("That's not a number. Guess Again");
+                    }
+                }
+                OutputStream os = socket.getOutputStream();
+                PrintStream ps = new PrintStream(os);
+                
+                ps.println(guess); 
+                ps.flush();
+                
+                is = socket.getInputStream();
+                isr = new InputStreamReader(is);
+                br = new BufferedReader(isr);
 
-                System.out.println(LennonHW2Client.class.getName() + ": message received from server='" + serverMessage + "'");
-                System.out.println(LennonHW2Client.class.getName() + ": time msec required for read=" + timeLength);
+                serverMessage = br.readLine(); // blocks
+                long endTime = System.currentTimeMillis();
+                long timeLength = endTime - startTime;
+
+                System.out.println(": message received from server:" + serverMessage);
+                System.out.println(": time to play=" + timeLength);
                 System.out.println("=======================================================");
-                // To push this further, launch multiple copies of TcpExample4Client simultaneously
+                
                 System.out.println("Want to go again? Y/N");
 
                 String response = scanner.nextLine();
                 play = "Y".equals(response.toUpperCase());
-                System.out.println(response.toUpperCase());
+                //line below is for debug
+                System.out.println(response.toUpperCase()); //for debug only. delete later
             }while(play);
             System.out.println("GOODBYE");
             System.out.println(LennonHW2Client.class.getName() + " complete");
diff --git a/assignments/src/MV3500Cohort2024JulySeptember/homework2/Lennon/LennonHW2HandlerThread.java b/assignments/src/MV3500Cohort2024JulySeptember/homework2/Lennon/LennonHW2HandlerThread.java
index 6fa0180d2f..2bdad4bfc1 100644
--- a/assignments/src/MV3500Cohort2024JulySeptember/homework2/Lennon/LennonHW2HandlerThread.java
+++ b/assignments/src/MV3500Cohort2024JulySeptember/homework2/Lennon/LennonHW2HandlerThread.java
@@ -1,7 +1,10 @@
 package MV3500Cohort2024JulySeptember.homework2.Lennon;
 
+import TcpExamples.TcpExample4Client;
+import TcpExamples.TcpExample4DispatchServer;
 import java.io.*;
 import java.net.*;
+import java.util.Random;
 
 /**
  * <p>
@@ -64,6 +67,9 @@ public class LennonHW2HandlerThread extends Thread
             System.out.println(LennonHW2HandlerThread.class.getName() + " starting to handle a thread...");
             
             // get the connection output stream, then wait a period of time. 
+            Random random = new Random();
+            int randNum = random.nextInt(10)+1;
+            
             OutputStream os = socket.getOutputStream();
             PrintStream ps = new PrintStream(os);
             
@@ -75,14 +81,25 @@ public class LennonHW2HandlerThread extends Thread
             BufferedReader br = new BufferedReader(isr);
 
             String userGuess = br.readLine(); // blocks
-            
+            String serverResponse = null;
+            try{
+                int userNum = Integer.parseInt(userGuess);
+                if (userNum == randNum){
+                    serverResponse = "Good job. You got it.";
+                }else{
+                    serverResponse = "You're wrong. It was " + randNum;
+                }
+            }catch(NumberFormatException e){
+                System.out.println("Something went wrong. guess was not a number" + e);
+                serverResponse = "Something went wrong. Anyway, my number was " + randNum;
+            }
             final long TIMEOUT = 2000; // 2000 milliseconds = 2 seconds, 10000 milliseconds = 10 seconds
             System.out.println(LennonHW2HandlerThread.class.getName() + " pausing for TIMEOUT=" + TIMEOUT + "ms" + 
                                " to emulate computation and avoid server-side overload"); 
             Thread.sleep(TIMEOUT);
                 
             // ps is the PrintStream is the Java way to use System.print() to pass data along the socket.
-            ps.println("That's a good guess, but you're wrong" + LennonHW2HandlerThread.class.getName()); // TODO insert socket count here!
+            ps.println(serverResponse + LennonHW2HandlerThread.class.getName()); // TODO insert socket count here!
             ps.flush();     // make sure that it indeed escapes current process and reaches the client
             socket.close(); // all clear, no longer need socket
             System.out.println(LennonHW2HandlerThread.class.getName() + " finished handling a thread, now exit.");
-- 
GitLab