diff --git a/src/edu/nps/moves/dis7/utilities/DisThreadedNetworkInterface.java b/src/edu/nps/moves/dis7/utilities/DisThreadedNetworkInterface.java index 8250f51b884397e0248505cff7dd7f3ce15c910d..465947f59ac79482536cb1a7bae8e6c05a22caca 100644 --- a/src/edu/nps/moves/dis7/utilities/DisThreadedNetworkInterface.java +++ b/src/edu/nps/moves/dis7/utilities/DisThreadedNetworkInterface.java @@ -309,25 +309,25 @@ public class DisThreadedNetworkInterface { if (receiveThread == null) { -// System.out.println("DisThreadedNetworkInterface createThreads() start receiveThread..."); +// System.out.println(TRACE_PREFIX + "createThreads() start receiveThread..."); receiveThread = new Thread(receiveThreadRunnable, "receiveThread"); // https://stackoverflow.com/questions/2213340/what-is-a-daemon-thread-in-java receiveThread.setDaemon(false); // user thread, not system thread receiveThread.setPriority(Thread.NORM_PRIORITY); receiveThread.start(); } - System.out.println("DisThreadedNetworkInterface createThreads() receiveThread.isAlive()=" + receiveThread.isAlive()); + System.out.println(TRACE_PREFIX + "createThreads() receiveThread.isAlive()=" + receiveThread.isAlive()); if (sendingThread == null) { -// System.out.println("DisThreadedNetworkInterface createThreads() start sendingThread..."); +// System.out.println(TRACE_PREFIX + "createThreads() start sendingThread..."); sendingThread = new Thread(sendingThreadRunnable, "sendingThread"); // https://stackoverflow.com/questions/2213340/what-is-a-daemon-thread-in-java sendingThread.setDaemon(false); // user thread, not system thread sendingThread.setPriority(Thread.NORM_PRIORITY); sendingThread.start(); } - System.out.println("DisThreadedNetworkInterface createThreads() sendingThread.isAlive()=" + receiveThread.isAlive()); + System.out.println(TRACE_PREFIX + "createThreads() sendingThread.isAlive()=" + receiveThread.isAlive()); } /** * Can be used to restart DisThreadedNetworkInterface if closed. @@ -570,7 +570,7 @@ public class DisThreadedNetworkInterface dos.flush(); // immediately force pdu write, if any remain baos.close(); dos.close(); - System.out.println ("*** DisThreadedNetworkInterface close():" + + System.out.println (TRACE_PREFIX + "close():" + " pdus2send.size()=" + pdus2send.size() + " baos.size()=" + baos.size() + " dos.size()=" + dos.size()); @@ -603,7 +603,7 @@ public class DisThreadedNetworkInterface } catch (Exception e) { - System.err.println ("*** DisThreadedNetworkInterface close()() unexpected exception!"); + System.err.println (TRACE_PREFIX + "close()() unexpected exception!"); } } public void killThread(Thread threadToKill) @@ -618,7 +618,7 @@ public class DisThreadedNetworkInterface } catch (InterruptedException ie) { - System.err.println ("*** DisThreadedNetworkInterface threadToKill join() failed to wait for threadToKill to die"); + System.err.println (TRACE_PREFIX + "threadToKill join() failed to wait for threadToKill to die"); System.err.flush(); ie.printStackTrace(System.err); } @@ -822,31 +822,14 @@ public class DisThreadedNetworkInterface TRACE_PREFIX = "[" + (DisThreadedNetworkInterface.class.getSimpleName() + " " + descriptor).trim() + "] "; } - /** - * Main method for testing. - * @see <a href="https://docs.oracle.com/javase/tutorial/getStarted/application/index.html">Java Tutorials: A Closer Look at the "Hello World!" Application</a> - * @param args [address, port, descriptor] command-line arguments are an array of optional String parameters that are passed from execution environment during invocation - */ - public static void main(String[] args) + private void selfTest() { - DisThreadedNetworkInterface disThreadedNetworkInterface; - - System.out.println("*** DisThreadedNetworkInterface main() self test started..."); - - String selfTestDescriptor = "main() self test"; - if ((args != null) && args.length == 3) - selfTestDescriptor = args[2]; - if ((args == null) || (args.length == 0)) - disThreadedNetworkInterface = new DisThreadedNetworkInterface( /* default address, port */ selfTestDescriptor); - else disThreadedNetworkInterface = new DisThreadedNetworkInterface(args[0], Integer.parseInt(args[1]), selfTestDescriptor); - - System.out.println("*** DisThreadedNetworkInterface main() self test initialized..."); - + System.out.println(TRACE_PREFIX + "main() self test initialized..."); try { EntityStatePdu espdu = new EntityStatePdu(); espdu.setMarking("self test"); - disThreadedNetworkInterface.setVerbose(true); + setVerbose(true); DisThreadedNetworkInterface.PduListener pduListener; pduListener = new DisThreadedNetworkInterface.PduListener() { @@ -854,32 +837,52 @@ public class DisThreadedNetworkInterface @Override public void incomingPdu(Pdu newPdu) { - System.out.println( "*** DisThreadedNetworkInterface main() pduListener.incomingPdu() received newPdu " + newPdu.getPduType().toString()); + System.out.println(TRACE_PREFIX + "main() pduListener.incomingPdu() received newPdu " + newPdu.getPduType().toString()); System.out.flush(); } }; - disThreadedNetworkInterface.addListener(pduListener); + addListener(pduListener); - System.out.println("*** DisThreadedNetworkInterface main() self test sending espdu..."); - disThreadedNetworkInterface.send(espdu); + System.out.println(TRACE_PREFIX + "self test sending espdu..."); + send(espdu); // briefly wait get response from threaded receiver - Thread.sleep(500L); + Thread.sleep(100L); System.out.flush(); System.err.flush(); // all done, close() in finally block } catch(InterruptedException ex) { - System.out.println("*** DisThreadedNetworkInterface main() self test InterruptedException " + ex.getMessage()); + System.out.println("[DisThreadedNetworkInterface] main() self test InterruptedException " + ex.getMessage()); } finally // carefully clean up following regular completion and any interruptions { - if (disThreadedNetworkInterface != null) - disThreadedNetworkInterface.close(); + close(); System.out.flush(); System.err.flush(); - System.out.println("*** DisThreadedNetworkInterface main() self test complete."); + System.out.println("[DisThreadedNetworkInterface] main() self test complete."); } } + + /** + * Main method provides support for testing. + * @see <a href="https://docs.oracle.com/javase/tutorial/getStarted/application/index.html">Java Tutorials: A Closer Look at the "Hello World!" Application</a> + * @param args [address, port, descriptor] command-line arguments are an array of optional String parameters that are passed from execution environment during invocation + */ + public static void main(String[] args) + { + System.out.println("[DisThreadedNetworkInterface] main() started..."); + + DisThreadedNetworkInterface disThreadedNetworkInterface; + + String selfTestDescriptor = "main() self test"; + if ((args != null) && args.length == 3) + selfTestDescriptor = args[2]; + if ((args == null) || (args.length == 0)) + disThreadedNetworkInterface = new DisThreadedNetworkInterface( /* default address, port */ selfTestDescriptor); + else disThreadedNetworkInterface = new DisThreadedNetworkInterface(args[0], Integer.parseInt(args[1]), selfTestDescriptor); + + disThreadedNetworkInterface.selfTest(); + } } diff --git a/src/edu/nps/moves/dis7/utilities/DisThreadedNetworkInterfaceSelfTestLog.txt b/src/edu/nps/moves/dis7/utilities/DisThreadedNetworkInterfaceSelfTestLog.txt index e920d43be552cedb53dd88f46626a0e43cdd42f5..520fbfaa692a7a52f1db1a30b9c5c042664d25e9 100644 --- a/src/edu/nps/moves/dis7/utilities/DisThreadedNetworkInterfaceSelfTestLog.txt +++ b/src/edu/nps/moves/dis7/utilities/DisThreadedNetworkInterfaceSelfTestLog.txt @@ -8,21 +8,21 @@ warning: [options] bootstrap class path not set in conjunction with -source 8 1 warning compile-single: run-single: -*** DisThreadedNetworkInterface main() self test started... +[DisThreadedNetworkInterface] main() started... [DisThreadedNetworkInterface] using network interface Intel(R) Wi-Fi 6E AX210 160MHz [DisThreadedNetworkInterface main() self test] datagramSocket.joinGroup address=239.1.2.3 port=3000 isConnected()=false createDatagramSocket() complete. -DisThreadedNetworkInterface createThreads() receiveThread.isAlive()=true -DisThreadedNetworkInterface createThreads() sendingThread.isAlive()=true -*** DisThreadedNetworkInterface main() self test initialized... -*** DisThreadedNetworkInterface main() self test sending espdu... +[DisThreadedNetworkInterface main() self test] createThreads() receiveThread.isAlive()=true +[DisThreadedNetworkInterface main() self test] createThreads() sendingThread.isAlive()=true +[DisThreadedNetworkInterface main() self test] main() self test initialized... +[DisThreadedNetworkInterface main() self test] self test sending espdu... [DisThreadedNetworkInterface main() self test] [sending 1] DisPduType 01 ENTITY_STATE self test, size 144 bytes) [DisThreadedNetworkInterface main() self test] [receipt 1] DisPduType 01 ENTITY_STATE self test, size 144 bytes) -received newPdu DisPduType 01 ENTITY_STATE -*** setKillSentinelAndInterrupts() killed=true sendingThread.isInterrupted()=false receiveThread.isInterrupted()=true -*** DisThreadedNetworkInterface close(): pdus2send.size()=0 baos.size()=0 dos.size()=144 +[DisThreadedNetworkInterface main() self test] main() pduListener.incomingPdu() received newPdu DisPduType 01 ENTITY_STATE +*** setKillSentinelAndInterrupts() killed=true sendingThread.isInterrupted()=true receiveThread.isInterrupted()=true +[DisThreadedNetworkInterface main() self test] close(): pdus2send.size()=0 baos.size()=0 dos.size()=144 [DisThreadedNetworkInterface main() self test] datagramSocket.leaveGroup address=239.1.2.3 port=3000 isClosed()=true close() complete. *** killThread() status: sendingThread.isAlive()=false sendingThread.isInterrupted()=true *** killThread() status: receiveThread.isAlive()=false receiveThread.isInterrupted()=true *** Thread close status: sendingThread.isAlive()=false receiveThread.isAlive()=false -*** DisThreadedNetworkInterface main() self test complete. -BUILD SUCCESSFUL (total time: 3 seconds) +[DisThreadedNetworkInterface] main() self test complete. +BUILD SUCCESSFUL (total time: 2 seconds)