Skip to content
Snippets Groups Projects
Commit 1845e664 authored by rojas's avatar rojas
Browse files

Merge origin/master

parents 99cc9ab8 de939023
No related branches found
No related tags found
No related merge requests found
No preview for this file type
package TcpExamples;
import static TcpExamples.TcpSentryHandlerThread.APPROACH_THE_GATE;
import static TcpExamples.TcpSentryHandlerThread.HALT_WHO_GOES_THERE;
import static TcpExamples.TcpSentryHandlerThread.HOLD_IT_RIGHT_THERE;
import static TcpExamples.TcpSentryHandlerThread.SENTRY_WATCH_PRESENT;
import static TcpExamples.TcpSentryHandlerThread.YOU_MAY_PASS;
import static TcpExamples.TcpSentryHandlerThread.PAY_ATTENTION;
import java.io.*;
import java.net.*;
......@@ -28,7 +30,8 @@ import java.net.*;
*/
public class TcpSentryClient
{
static String prefix = "[client] ";
/** who is speaking, by role */
static String ACTOR = "[client] ";
/** Default constructor */
public TcpSentryClient()
......@@ -46,12 +49,12 @@ public class TcpSentryClient
try
{
System.out.println("===============================================================================");
System.out.println(prefix + "startup, menu 1h.TcpSentryClient, " + TcpSentryClient.class.getName());
System.out.println(prefix + "up to " + MAX_LOOP_COUNT + " visitors may approach.");
System.out.println(ACTOR + "startup, menu 1h.TcpSentryClient, " + TcpSentryClient.class.getName());
System.out.println(ACTOR + "up to " + MAX_LOOP_COUNT + " visitors may approach.");
System.out.println("===============================================================================");
for (int loopCount = 1; loopCount <= MAX_LOOP_COUNT; loopCount++) // loop then exit
{
System.out.println(prefix + "creating client side to connect new socket #" + loopCount + "...");
System.out.println(ACTOR + "creating client side to connect new socket #" + loopCount + "...");
// We request an IP to connect to ("localhost") and
// port number at that IP (2317). This establishes
......@@ -64,7 +67,7 @@ public class TcpSentryClient
////////////////////////////////////////////////////////////////////////////////////////////
// Assignment code
String myName;
String myName = new String();
// input stream and output stream
InputStream socketInputStream = socket.getInputStream();
Reader socketInputStreamReader = new InputStreamReader(socketInputStream);
......@@ -81,52 +84,66 @@ public class TcpSentryClient
if (sentryQuery.endsWith(SENTRY_WATCH_PRESENT))
{
// duly noted, do not respond to this and continue looping/processing
System.out.println (prefix + "(no response)");
System.out.println (ACTOR + "(no response, observing situation)");
}
else if (sentryQuery.contains("Hello"))
else if (sentryQuery.toLowerCase().contains("hello"))
{
System.out.println (prefix + "Hello officer.");
if (!myName.isBlank())
System.out.println (ACTOR + "(" + myName + ") Hello officer.");
else System.out.println (ACTOR + " Hello officer."); // anonymous
}
else if (sentryQuery.endsWith(APPROACH_THE_GATE))
{
// duly noted, do not respond to this and drive forward
System.out.println (ACTOR + "(no response, driving forward to gate)");
}
else if (sentryQuery.endsWith(HALT_WHO_GOES_THERE))
{
System.out.println ("(visitors should type their name here)");
// user provides name from console
myName = System.console().readLine(); // this line blocks, awaiting keyboard input from user
socketPrintStream.println(prefix + myName); // send it back to dispatch server
socketPrintStream.println(ACTOR + myName); // send it back to dispatch server
// System.out.println ("[trace] console return: " + myName);
if (myName.equalsIgnoreCase("quit") || myName.equalsIgnoreCase("exit"))
{
socketPrintStream.flush(); // ensure this final message goes through the socket
System.out.println (prefix + "Exiting the program.");
System.out.println (ACTOR + "Exiting the program.");
socket.close();
System.exit(0);
}
}
else if (sentryQuery.endsWith(PAY_ATTENTION))
{
// better listen better, the prior query wasn't handled together
// no response expected or provided
}
else if (sentryQuery.endsWith(YOU_MAY_PASS))
{
System.out.println (prefix + "Thank you officer.");
System.out.println (ACTOR + "Thank you officer.");
break;
}
else if (sentryQuery.endsWith(HOLD_IT_RIGHT_THERE))
{
System.out.println (prefix + "OK I am outta here!");
System.out.println (ACTOR + "OK I am outta here!");
break;
}
// handling unexpected cases is important
else System.out.println (prefix + "I'm not sure what that means, say again please...");
}
else System.out.println (ACTOR + "I'm not sure what that means, say again please...");
} // continue looping until termination event occurs
System.out.println("===============================================================================");
// To push this further, launch multiple copies of TcpSentryClient simultaneously
// To push the sentry software further, launch multiple copies of this TcpSentryClient simultaneously
}
////////////////////////////////////////////////////////////////////////////////////////////
System.out.println(prefix + " complete");
System.out.println(ACTOR + " complete");
// main method now exits
}
catch (IOException e) {
System.out.println("*** " + prefix + "Problem with networking,"); // describe what is happening
System.out.println("*** " + ACTOR + "Problem with networking,"); // describe what is happening
System.out.println(" " + e);
// Provide more helpful information to user if exception occurs due to running twice at one time
if (e instanceof java.net.BindException)
......@@ -140,7 +157,7 @@ public class TcpSentryClient
}
finally
{
System.out.println("pau, all done");
System.out.println(TcpSentryClient.class.getName() + " all done.");
}
}
}
......@@ -24,7 +24,8 @@ import java.net.*;
*/
public class TcpSentryDispatchServer
{
static String prefix = "[dispatcher] ";
/** who is speaking, by role */
static String ACTOR = "[dispatcher] ";
/** Default constructor */
public TcpSentryDispatchServer()
......@@ -45,11 +46,11 @@ public class TcpSentryDispatchServer
int connectionCount = 0; // state variable
System.out.println("===============================================================================");
System.out.println(prefix + "startup, menu 1g.TcpSentryServer, " + TcpSentryDispatchServer.class.getName());
System.out.println(ACTOR + "startup, menu 1g.TcpSentryServer, " + TcpSentryDispatchServer.class.getName());
while (true) // infinite loop, handling client connections and dispatching another handler thread
{
System.out.println(prefix + "waiting and ready to accept socket connection from a new client...");
System.out.println(ACTOR + "waiting and ready to accept socket connection from a new client...");
serverSocketConnection = serverSocket.accept(); // block! until connected
connectionCount++; // now unblocked, we have gotten another connection
......@@ -59,19 +60,19 @@ public class TcpSentryDispatchServer
// Plenty of code in Example3, we instead let our proxy thread
// TcpSentryHandlerThread introduce itself to the client.
System.out.println(prefix + "received socket connection, creating handlerThread for visitor #" + connectionCount + "...");
System.out.println(ACTOR + "received socket connection, creating handlerThread for visitor #" + connectionCount + "...");
// hand off this aready-created and connected socket to constructor
sentryHandlerThread = new TcpSentryHandlerThread(serverSocketConnection); // creation logs a message
sentryHandlerThread.start();// invokes the run() method in that object, which sends initial reply on the socket
System.out.println(prefix + "a new sentry is now dispatched and running, using socket connection #" + connectionCount);
System.out.println(ACTOR + "a new sentry is now dispatched and running, using socket connection #" + connectionCount);
System.out.println("===============================================================================");
// while(true) continue looping, serverSocket is still waiting for another customer client
}
}
catch (IOException e) {
System.out.println("*** " + prefix + "Problem with networking,"); // describe what is happening
System.out.println("*** " + ACTOR + "Problem with networking,"); // describe what is happening
System.out.println(" " + e);
// Provide more helpful information to user if exception occurs due to running twice at one time
if (e instanceof java.net.BindException) {
......@@ -79,6 +80,10 @@ public class TcpSentryDispatchServer
}
System.exit(-1);
}
finally
{
System.out.println(TcpSentryDispatchServer.class.getName() + " all done.");
}
System.out.println("==============================================================================="); // execution complete
}
}
......@@ -33,22 +33,30 @@ import java.util.List;
*/
public class TcpSentryHandlerThread extends Thread
{
/** who is speaking, by role */
static final String ACTOR = "[sentry] ";
/** Sentry Scenario access list, as written this list is case sensitive.
* See <a href="https://stackoverflow.com/questions/1005073/initialization-of-an-arraylist-in-one-line" target="blank">https://stackoverflow.com/questions/1005073/initialization-of-an-arraylist-in-one-line</a>
*/
public static List<String> allowedNamesList =
Arrays.asList("Tim", "Stephen", "Mark", "Rene", "Simon", "James", "Ethan", "Jin Hong", "Don");
/** Sentry command vocabulary */
/** Sentry command vocabulary: the guard is out of the house! */
public static final String SENTRY_WATCH_PRESENT = "Announcement: the sentry watch is present and standing guard.";
/** Sentry command vocabulary */
/** Sentry command vocabulary: hand signal or loud statement (across the standoff distance) to next vehicle waiting at STOP sign */
public static final String APPROACH_THE_GATE = "(verbal or hand gesture) You may approach the gate.";
/** Sentry command vocabulary: use a standard admonition for broad recognition by visitors */
public static final String HALT_WHO_GOES_THERE = "Halt who goes there?";
/** Sentry command vocabulary */
public static final String YOU_MAY_PASS = "You may pass, have a great MOVES day!";
/** Sentry command vocabulary */
public static final String HOLD_IT_RIGHT_THERE = "You may not pass! Leave immediately or else...";
/** Sentry command vocabulary */
public static final String PAY_ATTENTION = "Did you hear me? Pay attention please.";
private static final String prefix = "[sentry] ";
/** TODO, not implemented: visitor ignores the sentry's direction to leave and enters the base */
public static final String INTRUDER_ALERT = "An unauthorized visitor has entered the base!";
/** The socket connection to a client */
Socket socket;
......@@ -62,7 +70,7 @@ public class TcpSentryHandlerThread extends Thread
TcpSentryHandlerThread(Socket socket)
{
this.socket = socket;
System.out.println(prefix + "1h.TcpSentryClient, " + TcpSentryHandlerThread.class.getName());
System.out.println(ACTOR + "1h.TcpSentryClient, " + TcpSentryHandlerThread.class.getName());
}
/**
* Program invocation and execution starts here - but is illegal and unwanted, so warn the unsuspecting user!
......@@ -71,7 +79,9 @@ public class TcpSentryHandlerThread extends Thread
public static void main(String[] args)
{
System.out.println ("*** TcpSentryHandlerThread is not a standalone executable progam.");
System.out.println ("*** Please run TcpSentryDispatchServer instead... now exiting.");
System.out.println ("*** Please run TcpSentryDispatchServer instead... now handing the baton back to the boss.");
TcpSentryDispatchServer.main(new String[] { /* dummy args */ });
// exit
}
/** Handles one connection. We add an artificial slowness
......@@ -84,7 +94,7 @@ public class TcpSentryHandlerThread extends Thread
{
try
{
System.out.println(prefix + "startup, menu 1g.TcpSentryServer, " + TcpSentryHandlerThread.class.getName());
System.out.println(ACTOR + "startup, menu 1g.TcpSentryServer, " + TcpSentryHandlerThread.class.getName());
// now starting to handle the thread
// setup input stream and output stream
......@@ -105,60 +115,83 @@ public class TcpSentryHandlerThread extends Thread
// since this thread is running, a socket connection has already been received from dispatch server.
// PrintStream is the Java way to use System.print() to pass string data along the socket.
socketPrintStream.println(prefix + SENTRY_WATCH_PRESENT);
System.out.println(prefix + SENTRY_WATCH_PRESENT);
socketPrintStream.println(ACTOR + SENTRY_WATCH_PRESENT);
System.out.println(ACTOR + SENTRY_WATCH_PRESENT);
// make sure that message indeed escapes current process and is pushed through socket to reach the client
socketPrintStream.flush();
// now the query-response interactions begin...
socketPrintStream.println(prefix + HALT_WHO_GOES_THERE);
System.out.println(prefix + HALT_WHO_GOES_THERE);
socketPrintStream.println(ACTOR + APPROACH_THE_GATE);
System.out.println(ACTOR + APPROACH_THE_GATE);
// No communications response occurs, instead the visitor drives up to the gate
socketPrintStream.println(ACTOR + HALT_WHO_GOES_THERE);
System.out.println(ACTOR + HALT_WHO_GOES_THERE);
String clientResponse = socketBufferedReader.readLine();
System.out.println (clientResponse);
// trim prefix if neccessary
// trim actor prefix if neccessary
int messageIndex = clientResponse.indexOf("]");
if (messageIndex > 0)
clientResponse = clientResponse.substring(messageIndex + 1).trim();
while (clientResponse.isBlank()) // repeat if needed
{
socketPrintStream.println(ACTOR + PAY_ATTENTION);
System.out.println(ACTOR + PAY_ATTENTION);
socketPrintStream.println(ACTOR + HALT_WHO_GOES_THERE);
System.out.println(ACTOR + HALT_WHO_GOES_THERE);
clientResponse = socketBufferedReader.readLine();
System.out.println (clientResponse);
// trim actor prefix if neccessary
messageIndex = clientResponse.indexOf("]");
if (messageIndex > 0)
clientResponse = clientResponse.substring(messageIndex + 1).trim();
}
if (clientResponse.trim().equalsIgnoreCase("quit") ||
clientResponse.trim().equalsIgnoreCase("exit"))
{
System.out.println (prefix + "Exiting the program.");
System.out.println (ACTOR + "Exiting the program.");
socket.close();
System.exit(0); // shuts down thread, not dispatch server
}
// simple response
socketPrintStream.println(prefix + "Hello, " + clientResponse);
System.out.println(prefix + "Hello, " + clientResponse);
socketPrintStream.println(ACTOR + "Hello, " + clientResponse);
System.out.println(ACTOR + "Hello, " + clientResponse);
// now check credential and respond accordingly
if (allowedNamesList.contains(clientResponse))
{
socketPrintStream.println(prefix + YOU_MAY_PASS);
System.out.println(prefix + YOU_MAY_PASS);
socketPrintStream.println(ACTOR + YOU_MAY_PASS);
System.out.println(ACTOR + YOU_MAY_PASS);
}
else
{
socketPrintStream.println(prefix + HOLD_IT_RIGHT_THERE);
System.out.println(prefix + HOLD_IT_RIGHT_THERE);
socketPrintStream.println(ACTOR + HOLD_IT_RIGHT_THERE);
System.out.println(ACTOR + HOLD_IT_RIGHT_THERE);
}
////////////////////////////////////////////////////////////////////////////////////////////
// socket.close(); // all clear, no longer need socket
System.out.println(prefix + "this visitor interaction is complete.");
System.out.println(ACTOR + "this visitor interaction is complete.");
System.out.println("=================================================================================");
// execution complete
}
catch(IOException | InterruptedException e) // either a networking or a threading problem
{
System.out.println("*** " + prefix + "Problem with networking,"); // describe what is happening
System.out.println("*** " + ACTOR + "Problem with networking,"); // describe what is happening
System.out.println(" " + e);
// Provide more helpful information to user if exception occurs due to running twice at one time
if (e instanceof java.net.BindException)
System.out.println("*** Be sure to stop any other running instances of programs using this port!");
}
finally
{
System.out.println(TcpSentryHandlerThread.class.getName() + " all done.");
}
}
}
examples/src/TcpExamples/TcpSentrySequenceDiagram.png

24 KiB | W: | H:

examples/src/TcpExamples/TcpSentrySequenceDiagram.png

24.6 KiB | W: | H:

examples/src/TcpExamples/TcpSentrySequenceDiagram.png
examples/src/TcpExamples/TcpSentrySequenceDiagram.png
examples/src/TcpExamples/TcpSentrySequenceDiagram.png
examples/src/TcpExamples/TcpSentrySequenceDiagram.png
  • 2-up
  • Swipe
  • Onion skin
......@@ -4,17 +4,105 @@ Invocation instructions:
Program responses:
TcpSentryServer
---------------
ant -f C:\\x3d-nps-gitlab\\NetworkedGraphicsMV3500\\examples -Dnb.internal.action.name=run run
TcpSentryClient
---------------------------------------
ant -f C:\\x3d-nps-gitlab\\NetworkedGraphicsMV3500\\examples -Dnb.internal.action.name=run.single -Djavac.includes=TcpExamples/TcpSentryClient.java -Drun.class=TcpExamples.TcpSentryClient run-single
init:
Deleting: C:\x3d-nps-gitlab\NetworkedGraphicsMV3500\examples\build\built-jar.properties
deps-jar:
Updating property file: C:\x3d-nps-gitlab\NetworkedGraphicsMV3500\examples\build\built-jar.properties
Compiling 1 source file to C:\x3d-nps-gitlab\NetworkedGraphicsMV3500\examples\build\classes
compile-single:
run-single:
===============================================================================
[client] startup, menu 1h.TcpSentryClient, TcpExamples.TcpSentryClient
[client] up to 6 visitors may approach.
===============================================================================
[client] creating client side to connect new socket #1...
[sentry] Announcement: the sentry watch is present and standing guard.
[client] (no response, observing situation)
[sentry] (verbal or hand gesture) You may approach the gate.
[client] (no response, driving forward to gate)
[sentry] Halt who goes there?
(visitors should type their name here)
Don
[sentry] Hello, Don
[client] (Don) Hello officer.
[sentry] You may pass, have a great MOVES day!
[client] Thank you officer.
===============================================================================
[client] creating client side to connect new socket #2...
[sentry] Announcement: the sentry watch is present and standing guard.
[client] (no response, observing situation)
[sentry] (verbal or hand gesture) You may approach the gate.
[client] (no response, driving forward to gate)
[sentry] Halt who goes there?
(visitors should type their name here)
don
[sentry] Hello, don
[client] (don) Hello officer.
[sentry] You may not pass! Leave immediately or else...
[client] OK I am outta here!
===============================================================================
[client] creating client side to connect new socket #3...
[sentry] Announcement: the sentry watch is present and standing guard.
[client] (no response, observing situation)
[sentry] (verbal or hand gesture) You may approach the gate.
[client] (no response, driving forward to gate)
[sentry] Halt who goes there?
(visitors should type their name here)
[sentry] Did you hear me? Pay attention please.
[sentry] Halt who goes there?
(visitors should type their name here)
[sentry] Did you hear me? Pay attention please.
[sentry] Halt who goes there?
(visitors should type their name here)
random_visitor
[sentry] Hello, random_visitor
[client] (random_visitor) Hello officer.
[sentry] You may not pass! Leave immediately or else...
[client] OK I am outta here!
===============================================================================
[client] creating client side to connect new socket #4...
[sentry] Announcement: the sentry watch is present and standing guard.
[client] (no response, observing situation)
[sentry] (verbal or hand gesture) You may approach the gate.
[client] (no response, driving forward to gate)
[sentry] Halt who goes there?
(visitors should type their name here)
Tim
[sentry] Hello, Tim
[client] (Tim) Hello officer.
[sentry] You may pass, have a great MOVES day!
[client] Thank you officer.
===============================================================================
[client] creating client side to connect new socket #5...
[sentry] Announcement: the sentry watch is present and standing guard.
[client] (no response, observing situation)
[sentry] (verbal or hand gesture) You may approach the gate.
[client] (no response, driving forward to gate)
[sentry] Halt who goes there?
(visitors should type their name here)
quit
[client] Exiting the program.
BUILD SUCCESSFUL (total time: 2 minutes 3 seconds)
---------------------------------------
TcpSentryServer, TcpSentryHandlerThread
---------------------------------------
ant -f C:\\x3d-nps-gitlab\\NetworkedGraphicsMV3500\\examples -Dnb.internal.action.name=debug.single -Djavac.includes=TcpExamples/TcpSentryHandlerThread.java -Ddebug.class=TcpExamples.TcpSentryHandlerThread debug-single
init:
Deleting: C:\x3d-nps-gitlab\NetworkedGraphicsMV3500\examples\build\built-jar.properties
deps-jar:
Updating property file: C:\x3d-nps-gitlab\NetworkedGraphicsMV3500\examples\build\built-jar.properties
Compiling 3 source files to C:\x3d-nps-gitlab\NetworkedGraphicsMV3500\examples\build\classes
Copying 1 file to C:\x3d-nps-gitlab\NetworkedGraphicsMV3500\examples\build\classes
compile:
run:
Compiling 1 source file to C:\x3d-nps-gitlab\NetworkedGraphicsMV3500\examples\build\classes
compile-single:
*** TcpSentryHandlerThread is not a standalone executable progam.
*** Please run TcpSentryDispatchServer instead... now handing the baton back to the boss.
===============================================================================
[dispatcher] startup, menu 1g.TcpSentryServer, TcpExamples.TcpSentryDispatchServer
[dispatcher] waiting and ready to accept socket connection from a new client...
......@@ -25,12 +113,14 @@ run:
[dispatcher] waiting and ready to accept socket connection from a new client...
[sentry] startup, menu 1g.TcpSentryServer, TcpExamples.TcpSentryHandlerThread
[sentry] Announcement: the sentry watch is present and standing guard.
[sentry] (verbal or hand gesture) You may approach the gate.
[sentry] Halt who goes there?
[client] joe
[sentry] Hello, joe
[sentry] You may not pass! Leave immediately or else...
[client] Don
[sentry] Hello, Don
[sentry] You may pass, have a great MOVES day!
[sentry] this visitor interaction is complete.
=================================================================================
TcpExamples.TcpSentryHandlerThread all done.
[dispatcher] received socket connection, creating handlerThread for visitor #2...
[sentry] 1h.TcpSentryClient, TcpExamples.TcpSentryHandlerThread
[dispatcher] a new sentry is now dispatched and running, using socket connection #2
......@@ -38,12 +128,14 @@ run:
[dispatcher] waiting and ready to accept socket connection from a new client...
[sentry] startup, menu 1g.TcpSentryServer, TcpExamples.TcpSentryHandlerThread
[sentry] Announcement: the sentry watch is present and standing guard.
[sentry] (verbal or hand gesture) You may approach the gate.
[sentry] Halt who goes there?
[client] don
[sentry] Hello, don
[sentry] You may not pass! Leave immediately or else...
[sentry] this visitor interaction is complete.
=================================================================================
TcpExamples.TcpSentryHandlerThread all done.
[dispatcher] received socket connection, creating handlerThread for visitor #3...
[sentry] 1h.TcpSentryClient, TcpExamples.TcpSentryHandlerThread
[dispatcher] a new sentry is now dispatched and running, using socket connection #3
......@@ -51,12 +143,20 @@ run:
[dispatcher] waiting and ready to accept socket connection from a new client...
[sentry] startup, menu 1g.TcpSentryServer, TcpExamples.TcpSentryHandlerThread
[sentry] Announcement: the sentry watch is present and standing guard.
[sentry] (verbal or hand gesture) You may approach the gate.
[sentry] Halt who goes there?
[client] Don
[sentry] Hello, Don
[sentry] You may pass, have a great MOVES day!
[client]
[sentry] Did you hear me? Pay attention please.
[sentry] Halt who goes there?
[client]
[sentry] Did you hear me? Pay attention please.
[sentry] Halt who goes there?
[client] random_visitor
[sentry] Hello, random_visitor
[sentry] You may not pass! Leave immediately or else...
[sentry] this visitor interaction is complete.
=================================================================================
TcpExamples.TcpSentryHandlerThread all done.
[dispatcher] received socket connection, creating handlerThread for visitor #4...
[sentry] 1h.TcpSentryClient, TcpExamples.TcpSentryHandlerThread
[dispatcher] a new sentry is now dispatched and running, using socket connection #4
......@@ -64,64 +164,26 @@ run:
[dispatcher] waiting and ready to accept socket connection from a new client...
[sentry] startup, menu 1g.TcpSentryServer, TcpExamples.TcpSentryHandlerThread
[sentry] Announcement: the sentry watch is present and standing guard.
[sentry] (verbal or hand gesture) You may approach the gate.
[sentry] Halt who goes there?
[client] exit
[sentry] Exiting the program.
BUILD SUCCESSFUL (total time: 54 seconds)
---------------
TcpSentryClient
---------------
ant -f C:\\x3d-nps-gitlab\\NetworkedGraphicsMV3500\\examples -Dnb.internal.action.name=run run
init:
Deleting: C:\x3d-nps-gitlab\NetworkedGraphicsMV3500\examples\build\built-jar.properties
deps-jar:
Updating property file: C:\x3d-nps-gitlab\NetworkedGraphicsMV3500\examples\build\built-jar.properties
compile:
run:
===============================================================================
[client] startup, menu 1h.TcpSentryClient, TcpExamples.TcpSentryClient
[client] up to 6 visitors may approach.
===============================================================================
[client] creating client side to connect new socket #1...
[sentry] Announcement: the sentry watch is present and standing guard.
[client] (no response)
[sentry] Halt who goes there?
(visitors should type their name here)
joe
[sentry] Hello, joe
[client] Hello officer.
[sentry] You may not pass! Leave immediately or else...
[client] OK I am outta here!
===============================================================================
[client] creating client side to connect new socket #2...
[sentry] Announcement: the sentry watch is present and standing guard.
[client] (no response)
[sentry] Halt who goes there?
(visitors should type their name here)
don
[sentry] Hello, don
[client] Hello officer.
[sentry] You may not pass! Leave immediately or else...
[client] OK I am outta here!
===============================================================================
[client] creating client side to connect new socket #3...
[sentry] Announcement: the sentry watch is present and standing guard.
[client] (no response)
[sentry] Halt who goes there?
(visitors should type their name here)
Don
[sentry] Hello, Don
[client] Hello officer.
[client] Tim
[sentry] Hello, Tim
[sentry] You may pass, have a great MOVES day!
[client] Thank you officer.
[sentry] this visitor interaction is complete.
=================================================================================
TcpExamples.TcpSentryHandlerThread all done.
[dispatcher] received socket connection, creating handlerThread for visitor #5...
[sentry] 1h.TcpSentryClient, TcpExamples.TcpSentryHandlerThread
[dispatcher] a new sentry is now dispatched and running, using socket connection #5
===============================================================================
[client] creating client side to connect new socket #4...
[dispatcher] waiting and ready to accept socket connection from a new client...
[sentry] startup, menu 1g.TcpSentryServer, TcpExamples.TcpSentryHandlerThread
[sentry] Announcement: the sentry watch is present and standing guard.
[client] (no response)
[sentry] (verbal or hand gesture) You may approach the gate.
[sentry] Halt who goes there?
(visitors should type their name here)
exit
[client] Exiting the program.
BUILD SUCCESSFUL (total time: 32 seconds)
---------------
[client] quit
[sentry] Exiting the program.
debug-single:
BUILD SUCCESSFUL (total time: 2 minutes 23 seconds)
---------------------------------------
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment