From 0d772a523faeab8783c494180e20a8077ed54236 Mon Sep 17 00:00:00 2001
From: brutzman <brutzman@nps.edu>
Date: Sat, 28 Aug 2021 20:31:42 -0700
Subject: [PATCH] updated open-dis7-java.jar testing

---
 .../dis7/examples/AlphabeticalPduSender.java  |  18 +-
 .../examples/AlphabeticalPduSenderLog.txt     |   8 +-
 .../moves/dis7/examples/EspduReceiver.java    |   4 +-
 .../moves/dis7/examples/EspduReceiverLog.txt  | 152 ++++++++--------
 .../moves/dis7/examples/EspduReceiverNIO.java |   2 +-
 .../dis7/examples/EspduReceiverNioLog.txt     |   4 +-
 .../nps/moves/dis7/examples/EspduSender.java  |   2 +-
 .../moves/dis7/examples/EspduSenderNIO.java   |   2 +-
 .../moves/dis7/examples/PduListenerSaver.java |  94 ++++++----
 .../dis7/examples/PduListenerSaverLog.dislog  | 148 ++++++++--------
 .../dis7/examples/PduListenerSaverLog.txt     | 163 ++++++++++--------
 .../moves/dis7/examples/PduReaderPlayer.java  |  59 ++++---
 .../dis7/examples/PduReaderPlayerLog.txt      |   1 +
 13 files changed, 354 insertions(+), 303 deletions(-)
 create mode 100644 src/edu/nps/moves/dis7/examples/PduReaderPlayerLog.txt

diff --git a/src/edu/nps/moves/dis7/examples/AlphabeticalPduSender.java b/src/edu/nps/moves/dis7/examples/AlphabeticalPduSender.java
index 3dd2989c1e..abcde237ce 100644
--- a/src/edu/nps/moves/dis7/examples/AlphabeticalPduSender.java
+++ b/src/edu/nps/moves/dis7/examples/AlphabeticalPduSender.java
@@ -27,22 +27,21 @@ import java.util.List;
  */
 public class AlphabeticalPduSender
 {
-
-  private int port;
   InetAddress multicastAddress;
+  private int port;
 
   /** Constructor
      * @param port socket port number
      * @param multicast multicast address
      */
-  public AlphabeticalPduSender(int port, String multicast)
+  public AlphabeticalPduSender(String multicast, int port)
   {
     try {
-      this.port = port;
       multicastAddress = InetAddress.getByName(multicast);
       if (!multicastAddress.isMulticastAddress()) {
         System.out.println("Not a multicast address: " + multicast);
       }
+      this.port = port;
     }
     catch (UnknownHostException e) {
       System.err.println("Unable to open socket: " + e);
@@ -334,13 +333,16 @@ public class AlphabeticalPduSender
   public static void main(String args[])
   {
     AlphabeticalPduSender sender;
-    if (args.length == 2) {
-      sender = new AlphabeticalPduSender(Integer.parseInt(args[0]), args[1]);
+    if (args.length == 2) 
+    {
+        String address = args[0];
+        int    port    = Integer.parseInt(args[1]);
+        sender = new AlphabeticalPduSender(address, port);
     }
     else {
       System.out.println("Usage:   AlphabeticalPduSender <port> <multicast group>");
-      System.out.println("Default: AlphabeticalPduSender  " + DisThreadedNetworkInterface.DEFAULT_DIS_PORT + "   " + DisThreadedNetworkInterface.DEFAULT_MULTICAST_ADDRESS);
-      sender = new AlphabeticalPduSender(DisThreadedNetworkInterface.DEFAULT_DIS_PORT, DisThreadedNetworkInterface.DEFAULT_MULTICAST_ADDRESS);
+      System.out.println("Default: AlphabeticalPduSender  " + DisThreadedNetworkInterface.DEFAULT_DIS_ADDRESS + "   " + DisThreadedNetworkInterface.DEFAULT_DIS_PORT);
+      sender =                 new AlphabeticalPduSender     (DisThreadedNetworkInterface.DEFAULT_DIS_ADDRESS,          DisThreadedNetworkInterface.DEFAULT_DIS_PORT);
     }
     sender.run();
   }
diff --git a/src/edu/nps/moves/dis7/examples/AlphabeticalPduSenderLog.txt b/src/edu/nps/moves/dis7/examples/AlphabeticalPduSenderLog.txt
index 34d804817d..7722759c55 100644
--- a/src/edu/nps/moves/dis7/examples/AlphabeticalPduSenderLog.txt
+++ b/src/edu/nps/moves/dis7/examples/AlphabeticalPduSenderLog.txt
@@ -1,17 +1,15 @@
 ant -f C:\\x3d-github\\open-dis7-java -Dnb.internal.action.name=run.single -Djavac.includes=edu/nps/moves/dis7/examples/AlphabeticalPduSender.java -Drun.class=edu.nps.moves.dis7.examples.AlphabeticalPduSender run-single
 init:
-Deleting: C:\x3d-github\open-dis7-java\build\built-jar.properties
 deps-jar:
-Updating property file: C:\x3d-github\open-dis7-java\build\built-jar.properties
 Compiling 1 source file to C:\x3d-github\open-dis7-java\build\classes
 warning: [options] bootstrap class path not set in conjunction with -source 8
 1 warning
 compile-single:
 run-single:
 Usage:   AlphabeticalPduSender <port> <multicast group>
-Default: AlphabeticalPduSender  3000   225.4.5.6
-PDU of type DISPDUType: 0 OTHER not created or sent 
-Using network interface Intel(R) Dual Band Wireless-AC 8260
+Default: AlphabeticalPduSender  239.1.2.3   3000
+PDU of type DisPduType 00 OTHER not created or sent 
+[DisThreadedNetworkInterface] using network interface Intel(R) Centrino(R) Ultimate-N 6300 AGN
 1.  Sent PDU of type 15 AcknowledgePdu
 2.  Sent PDU of type 55 AcknowledgeReliablePdu
 3.  Sent PDU of type 16 ActionRequestPdu
diff --git a/src/edu/nps/moves/dis7/examples/EspduReceiver.java b/src/edu/nps/moves/dis7/examples/EspduReceiver.java
index 705f3d83c4..e4e86ee5e3 100644
--- a/src/edu/nps/moves/dis7/examples/EspduReceiver.java
+++ b/src/edu/nps/moves/dis7/examples/EspduReceiver.java
@@ -44,7 +44,7 @@ public class EspduReceiver
       // Specify the socket to receive data
       socket = new MulticastSocket(DisThreadedNetworkInterface.DEFAULT_DIS_PORT);
       
-      InetAddress maddr = InetAddress.getByName(DisThreadedNetworkInterface.DEFAULT_MULTICAST_ADDRESS);
+      InetAddress maddr = InetAddress.getByName(DisThreadedNetworkInterface.DEFAULT_DIS_ADDRESS);
       InetSocketAddress group = new InetSocketAddress(maddr, DisThreadedNetworkInterface.DEFAULT_DIS_PORT);
 
       socket.joinGroup(group, DisThreadedNetworkInterface.findIpv4Interface());
@@ -68,7 +68,7 @@ public class EspduReceiver
           aPdu = it.next();
           pduCounter++;
 
-          System.out.print(pduCounter + ". got PDU of type: " + aPdu.getClass().getName());
+          System.out.print(pduCounter + ". got PDU of type " + aPdu.getClass().getSimpleName());
           if (aPdu instanceof EntityStatePdu) {
             eid = ((EntityStatePdu) aPdu).getEntityID();
             position = ((EntityStatePdu) aPdu).getEntityLocation();
diff --git a/src/edu/nps/moves/dis7/examples/EspduReceiverLog.txt b/src/edu/nps/moves/dis7/examples/EspduReceiverLog.txt
index 11080bb241..51e5af4c58 100644
--- a/src/edu/nps/moves/dis7/examples/EspduReceiverLog.txt
+++ b/src/edu/nps/moves/dis7/examples/EspduReceiverLog.txt
@@ -1,86 +1,82 @@
 ant -f C:\\x3d-github\\open-dis7-java -Dnb.internal.action.name=run.single -Djavac.includes=edu/nps/moves/dis7/examples/EspduReceiver.java -Drun.class=edu.nps.moves.dis7.examples.EspduReceiver run-single
 init:
-Deleting: C:\x3d-github\open-dis7-java\build\built-jar.properties
 deps-jar:
-Updating property file: C:\x3d-github\open-dis7-java\build\built-jar.properties
 Compiling 1 source file to C:\x3d-github\open-dis7-java\build\classes
 warning: [options] bootstrap class path not set in conjunction with -source 8
 1 warning
 compile-single:
 run-single:
-Using network interface Intel(R) Dual Band Wireless-AC 8260
-1. got PDU of type: edu.nps.moves.dis7.AcknowledgePdu
-2. got PDU of type: edu.nps.moves.dis7.AcknowledgeReliablePdu
-3. got PDU of type: edu.nps.moves.dis7.ActionRequestPdu
-4. got PDU of type: edu.nps.moves.dis7.ActionRequestReliablePdu
-5. got PDU of type: edu.nps.moves.dis7.ActionResponsePdu
-6. got PDU of type: edu.nps.moves.dis7.ActionResponseReliablePdu
-7. got PDU of type: edu.nps.moves.dis7.AggregateStatePdu
-8. got PDU of type: edu.nps.moves.dis7.AppearancePdu
-9. got PDU of type: edu.nps.moves.dis7.ArealObjectStatePdu
-10. got PDU of type: edu.nps.moves.dis7.ArticulatedPartsPdu
-11. got PDU of type: edu.nps.moves.dis7.AttributePdu
-12. got PDU of type: edu.nps.moves.dis7.CollisionElasticPdu
-13. got PDU of type: edu.nps.moves.dis7.CollisionPdu
-14. got PDU of type: edu.nps.moves.dis7.CommentPdu
-15. got PDU of type: edu.nps.moves.dis7.CommentReliablePdu
-16. got PDU of type: edu.nps.moves.dis7.CreateEntityPdu
-17. got PDU of type: edu.nps.moves.dis7.CreateEntityReliablePdu
-18. got PDU of type: edu.nps.moves.dis7.DataPdu
-19. got PDU of type: edu.nps.moves.dis7.DataQueryPdu
-20. got PDU of type: edu.nps.moves.dis7.DataQueryReliablePdu
-21. got PDU of type: edu.nps.moves.dis7.DataReliablePdu
-22. got PDU of type: edu.nps.moves.dis7.DesignatorPdu
-23. got PDU of type: edu.nps.moves.dis7.DetonationPdu
-24. got PDU of type: edu.nps.moves.dis7.DirectedEnergyFirePdu
-25. got PDU of type: edu.nps.moves.dis7.ElectromagneticEmissionPdu
-26. got PDU of type: edu.nps.moves.dis7.EntityDamageStatusPdu
-27. got PDU of type: edu.nps.moves.dis7.EntityStatePdu EID:[0, 0, 0]  Location in DIS coordinates: [0.0, 0.0, 0.0]
-28. got PDU of type: edu.nps.moves.dis7.EntityStateUpdatePdu
-29. got PDU of type: edu.nps.moves.dis7.EnvironmentalProcessPdu
-30. got PDU of type: edu.nps.moves.dis7.EventReportPdu
-31. got PDU of type: edu.nps.moves.dis7.EventReportReliablePdu
-32. got PDU of type: edu.nps.moves.dis7.FirePdu
-33. got PDU of type: edu.nps.moves.dis7.GriddedDataPdu
-34. got PDU of type: edu.nps.moves.dis7.IFFPdu
-35. got PDU of type: edu.nps.moves.dis7.InformationOperationsActionPdu
-36. got PDU of type: edu.nps.moves.dis7.InformationOperationsReportPdu
-37. got PDU of type: edu.nps.moves.dis7.IntercomControlPdu
-Problems decoding multiple PDUs in datagram; decoded as may as possible
-38. got PDU of type: edu.nps.moves.dis7.IntercomSignalPdu
-39. got PDU of type: edu.nps.moves.dis7.IsGroupOfPdu
-40. got PDU of type: edu.nps.moves.dis7.IsPartOfPdu
-41. got PDU of type: edu.nps.moves.dis7.LinearObjectStatePdu
-42. got PDU of type: edu.nps.moves.dis7.LEDetonationPdu
-43. got PDU of type: edu.nps.moves.dis7.LEFirePdu
-Problems decoding multiple PDUs in datagram; decoded as may as possible
-44. got PDU of type: edu.nps.moves.dis7.MinefieldDataPdu
-45. got PDU of type: edu.nps.moves.dis7.MinefieldQueryPdu
-46. got PDU of type: edu.nps.moves.dis7.MinefieldResponseNACKPdu
-47. got PDU of type: edu.nps.moves.dis7.MinefieldStatePdu
-48. got PDU of type: edu.nps.moves.dis7.PointObjectStatePdu
-49. got PDU of type: edu.nps.moves.dis7.ReceiverPdu
-50. got PDU of type: edu.nps.moves.dis7.RecordQueryReliablePdu
-51. got PDU of type: edu.nps.moves.dis7.RecordReliablePdu
-52. got PDU of type: edu.nps.moves.dis7.RemoveEntityPdu
-53. got PDU of type: edu.nps.moves.dis7.RemoveEntityReliablePdu
-Problems decoding multiple PDUs in datagram; decoded as may as possible
-54. got PDU of type: edu.nps.moves.dis7.RepairCompletePdu
-55. got PDU of type: edu.nps.moves.dis7.RepairResponsePdu
-56. got PDU of type: edu.nps.moves.dis7.ResupplyCancelPdu
-57. got PDU of type: edu.nps.moves.dis7.ResupplyOfferPdu
-58. got PDU of type: edu.nps.moves.dis7.ResupplyReceivedPdu
-59. got PDU of type: edu.nps.moves.dis7.ServiceRequestPdu
-60. got PDU of type: edu.nps.moves.dis7.SetDataPdu
-61. got PDU of type: edu.nps.moves.dis7.SetDataReliablePdu
-62. got PDU of type: edu.nps.moves.dis7.SetRecordReliablePdu
-63. got PDU of type: edu.nps.moves.dis7.SignalPdu
-64. got PDU of type: edu.nps.moves.dis7.StartResumePdu
-65. got PDU of type: edu.nps.moves.dis7.StartResumeReliablePdu
-66. got PDU of type: edu.nps.moves.dis7.StopFreezePdu
-67. got PDU of type: edu.nps.moves.dis7.StopFreezeReliablePdu
-68. got PDU of type: edu.nps.moves.dis7.SEESPdu
-69. got PDU of type: edu.nps.moves.dis7.TSPIPdu
-70. got PDU of type: edu.nps.moves.dis7.TransferOwnershipPdu
-71. got PDU of type: edu.nps.moves.dis7.TransmitterPdu
-72. got PDU of type: edu.nps.moves.dis7.UnderwaterAcousticPdu
+[DisThreadedNetworkInterface] using network interface Intel(R) Centrino(R) Ultimate-N 6300 AGN
+1. got PDU of type AcknowledgePdu
+2. got PDU of type AcknowledgeReliablePdu
+3. got PDU of type ActionRequestPdu
+4. got PDU of type ActionRequestReliablePdu
+5. got PDU of type ActionResponsePdu
+6. got PDU of type ActionResponseReliablePdu
+7. got PDU of type AggregateStatePdu
+8. got PDU of type AppearancePdu
+9. got PDU of type ArealObjectStatePdu
+10. got PDU of type ArticulatedPartsPdu
+11. got PDU of type AttributePdu
+12. got PDU of type CollisionElasticPdu
+13. got PDU of type CollisionPdu
+14. got PDU of type CommentPdu
+15. got PDU of type CommentReliablePdu
+16. got PDU of type CreateEntityPdu
+17. got PDU of type CreateEntityReliablePdu
+18. got PDU of type DataPdu
+19. got PDU of type DataQueryPdu
+20. got PDU of type DataQueryReliablePdu
+21. got PDU of type DataReliablePdu
+22. got PDU of type DesignatorPdu
+23. got PDU of type DetonationPdu
+24. got PDU of type DirectedEnergyFirePdu
+25. got PDU of type ElectromagneticEmissionPdu
+26. got PDU of type EntityDamageStatusPdu
+27. got PDU of type EntityStatePdu EID:[0, 0, 0]  Location in DIS coordinates: [0.0, 0.0, 0.0]
+28. got PDU of type EntityStateUpdatePdu
+29. got PDU of type EnvironmentalProcessPdu
+30. got PDU of type EventReportPdu
+31. got PDU of type EventReportReliablePdu
+32. got PDU of type FirePdu
+33. got PDU of type GriddedDataPdu
+34. got PDU of type IFFPdu
+35. got PDU of type InformationOperationsActionPdu
+36. got PDU of type InformationOperationsReportPdu
+37. got PDU of type IntercomControlPdu
+38. got PDU of type IntercomSignalPdu
+39. got PDU of type IsGroupOfPdu
+40. got PDU of type IsPartOfPdu
+41. got PDU of type LinearObjectStatePdu
+42. got PDU of type LEDetonationPdu
+43. got PDU of type LEFirePdu
+44. got PDU of type MinefieldDataPdu
+45. got PDU of type MinefieldQueryPdu
+46. got PDU of type MinefieldResponseNACKPdu
+47. got PDU of type MinefieldStatePdu
+48. got PDU of type PointObjectStatePdu
+49. got PDU of type ReceiverPdu
+50. got PDU of type RecordQueryReliablePdu
+51. got PDU of type RecordReliablePdu
+52. got PDU of type RemoveEntityPdu
+53. got PDU of type RemoveEntityReliablePdu
+54. got PDU of type RepairCompletePdu
+55. got PDU of type RepairResponsePdu
+56. got PDU of type ResupplyCancelPdu
+57. got PDU of type ResupplyOfferPdu
+58. got PDU of type ResupplyReceivedPdu
+59. got PDU of type ServiceRequestPdu
+60. got PDU of type SetDataPdu
+61. got PDU of type SetDataReliablePdu
+62. got PDU of type SetRecordReliablePdu
+63. got PDU of type SignalPdu
+64. got PDU of type StartResumePdu
+65. got PDU of type StartResumeReliablePdu
+66. got PDU of type StopFreezePdu
+67. got PDU of type StopFreezeReliablePdu
+68. got PDU of type SEESPdu
+69. got PDU of type TSPIPdu
+70. got PDU of type TransferOwnershipPdu
+71. got PDU of type TransmitterPdu
+72. got PDU of type UnderwaterAcousticPdu
+BUILD STOPPED (total time: 39 seconds)
diff --git a/src/edu/nps/moves/dis7/examples/EspduReceiverNIO.java b/src/edu/nps/moves/dis7/examples/EspduReceiverNIO.java
index b0f3efaab7..fac95568bc 100644
--- a/src/edu/nps/moves/dis7/examples/EspduReceiverNIO.java
+++ b/src/edu/nps/moves/dis7/examples/EspduReceiverNIO.java
@@ -39,7 +39,7 @@ public class EspduReceiverNIO
     {
       // Specify the socket to receive data
                 socket = new MulticastSocket(DisThreadedNetworkInterface.DEFAULT_DIS_PORT);
-      multicastAddress = InetAddress.getByName(DisThreadedNetworkInterface.DEFAULT_MULTICAST_ADDRESS);
+      multicastAddress = InetAddress.getByName(DisThreadedNetworkInterface.DEFAULT_DIS_ADDRESS);
                  group = new InetSocketAddress(multicastAddress, DisThreadedNetworkInterface.DEFAULT_DIS_PORT);
       socket.joinGroup(group, DisThreadedNetworkInterface.findIpv4Interface()); // picks best candidate
 
diff --git a/src/edu/nps/moves/dis7/examples/EspduReceiverNioLog.txt b/src/edu/nps/moves/dis7/examples/EspduReceiverNioLog.txt
index d7b71fbc11..efe1f16bdb 100644
--- a/src/edu/nps/moves/dis7/examples/EspduReceiverNioLog.txt
+++ b/src/edu/nps/moves/dis7/examples/EspduReceiverNioLog.txt
@@ -1,14 +1,12 @@
 ant -f C:\\x3d-github\\open-dis7-java -Dnb.internal.action.name=run.single -Djavac.includes=edu/nps/moves/dis7/examples/EspduReceiverNIO.java -Drun.class=edu.nps.moves.dis7.examples.EspduReceiverNIO run-single
 init:
-Deleting: C:\x3d-github\open-dis7-java\build\built-jar.properties
 deps-jar:
-Updating property file: C:\x3d-github\open-dis7-java\build\built-jar.properties
 Compiling 1 source file to C:\x3d-github\open-dis7-java\build\classes
 warning: [options] bootstrap class path not set in conjunction with -source 8
 1 warning
 compile-single:
 run-single:
-Using network interface Intel(R) Dual Band Wireless-AC 8260
+[DisThreadedNetworkInterface] using network interface Intel(R) Centrino(R) Ultimate-N 6300 AGN
 1. got PDU of type: AcknowledgePdu
 2. got PDU of type: AcknowledgeReliablePdu
 3. got PDU of type: ActionRequestPdu
diff --git a/src/edu/nps/moves/dis7/examples/EspduSender.java b/src/edu/nps/moves/dis7/examples/EspduSender.java
index 9cce76cbb7..f2a4d75a7d 100644
--- a/src/edu/nps/moves/dis7/examples/EspduSender.java
+++ b/src/edu/nps/moves/dis7/examples/EspduSender.java
@@ -60,7 +60,7 @@ public class EspduSender
     InetAddress destinationIp = null; // must be initialized, even if null
 
     try {
-      destinationIp = InetAddress.getByName(DisThreadedNetworkInterface.DEFAULT_MULTICAST_ADDRESS);
+      destinationIp = InetAddress.getByName(DisThreadedNetworkInterface.DEFAULT_DIS_ADDRESS);
     }
     catch (UnknownHostException e) {
       System.err.println(e + " Cannot create multicast address");
diff --git a/src/edu/nps/moves/dis7/examples/EspduSenderNIO.java b/src/edu/nps/moves/dis7/examples/EspduSenderNIO.java
index cef92ed713..11deb0f5cd 100644
--- a/src/edu/nps/moves/dis7/examples/EspduSenderNIO.java
+++ b/src/edu/nps/moves/dis7/examples/EspduSenderNIO.java
@@ -46,7 +46,7 @@ public class EspduSenderNIO
     try
     {
                 socket = new MulticastSocket();
-      multicastAddress = InetAddress.getByName(DisThreadedNetworkInterface.DEFAULT_MULTICAST_ADDRESS);
+      multicastAddress = InetAddress.getByName(DisThreadedNetworkInterface.DEFAULT_DIS_ADDRESS);
                  group = new InetSocketAddress(multicastAddress, DisThreadedNetworkInterface.DEFAULT_DIS_PORT);
       socket.joinGroup(group, DisThreadedNetworkInterface.findIpv4Interface()); // picks best candidate
       
diff --git a/src/edu/nps/moves/dis7/examples/PduListenerSaver.java b/src/edu/nps/moves/dis7/examples/PduListenerSaver.java
index 67926dfc31..efa314b193 100644
--- a/src/edu/nps/moves/dis7/examples/PduListenerSaver.java
+++ b/src/edu/nps/moves/dis7/examples/PduListenerSaver.java
@@ -6,13 +6,13 @@ package edu.nps.moves.dis7.examples;
 
 import edu.nps.moves.dis7.utilities.DisThreadedNetworkInterface;
 import edu.nps.moves.dis7.utilities.stream.PduRecorder;
-import java.io.IOException;
 import java.util.Scanner;
 
 /** Class to leverage the {@link edu.nps.moves.dis7.utilities.stream.PduRecorder} 
  * with PDU log saving console controls for resume, pause and quit.
  * 
  * PduSaver.java created on Aug 21, 2019
+ * Renamed PduListenerSaver
  * MOVES Institute Naval Postgraduate School, Monterey, CA, USA www.nps.edu
  *
  * @author Mike Bailey, jmbailey@nps.edu
@@ -20,81 +20,117 @@ import java.util.Scanner;
  */
 public class PduListenerSaver
 {
-  private final static String DEFAULT_OUTPUT_DIRECTORY = "./pduLog";
+    private final static String DEFAULT_OUTPUT_DIRECTORY = "./pduLog";
+    
+    /** Default multicast group address <code>239.1.2.3</code> for send and receive connections.
+     * @see <a href="https://en.wikipedia.org/wiki/Multicast_address">https://en.wikipedia.org/wiki/Multicast_address</a>  */
+    public static String DEFAULT_DIS_ADDRESS = DisThreadedNetworkInterface.DEFAULT_DIS_ADDRESS;
 
-  private enum mystate
-  {
-    RUNNING,
-    PAUSED;
-  }
+    /** Default socket port  <code>3000</code>, matches Wireshark DIS capture default
+     * @see <a href="https://en.wikipedia.org/wiki/Port_(computer_networking)">https://en.wikipedia.org/wiki/Port_(computer_networking)</a> */
+    public static int DEFAULT_DIS_PORT = DisThreadedNetworkInterface.DEFAULT_DIS_PORT;
+
+    private enum mystate
+    {
+      RUNNING,
+      PAUSED;
+    }
+    private String  disAddress; 
+    private int     disPort;
+
+    /**
+     * Object constructor using default multicast address and port
+     */
+    public PduListenerSaver()
+    {
+        this(DEFAULT_DIS_ADDRESS, DEFAULT_DIS_PORT);
+    }
 
-  /** Command-line invocation (CLI)
+    /**
+     * Object constructor using specified multicast address and port 
+     * @param address the multicast group or unicast address to utilize
+     * @param port the multicast port to utilize
+     */
+    public PduListenerSaver(String address, int port)
+    {
+        disAddress = address;
+        disPort    = port;
+    }
+
+    /**
+     * Command-line invocation (CLI), execution starts here
     * @param args command-line arguments
     */
   public static void main(String[] args)
   {
-    String outputDirectoryPath = DEFAULT_OUTPUT_DIRECTORY;
-    String multicastAddress    = DisThreadedNetworkInterface.DEFAULT_MULTICAST_ADDRESS;
-    int    port                = DisThreadedNetworkInterface.DEFAULT_DIS_PORT;
+        String  outputDirectory = DEFAULT_OUTPUT_DIRECTORY;
+        String multicastAddress = DEFAULT_DIS_ADDRESS;
+        int                port = DEFAULT_DIS_PORT;
+
+        System.out.println("edu.nps.moves.dis.examples.PduListenerSaver started...");
 
-    switch (args.length) {
+        switch (args.length)
+        {
       case 0:
         // use default values
         break;
       case 1:
-        outputDirectoryPath = args[0];
+                outputDirectory = args[0];
         break;
       case 3:
-        outputDirectoryPath   = args[0];
-        multicastAddress      = args[1];
-        port = Integer.parseInt(args[2]);
+                 outputDirectory = args[0];
+                multicastAddress = args[1];
+                            port = Integer.parseInt(args[2]);
         break;
       default:
-        System.err.println("Usage: PduListenerSaver() or PduListenerSaver(\"outputdir\") or PduListenerSaver(\"outputdir\",\"multicast address\", ipPort");
+                // Common-sense practice is to print help message if invocation is problematic
+                System.err.println("Usage: PduListenerSaver() or PduListenerSaver(\"outputdir\") or PduListenerSaver(\"outputDirectory\",\"multicastAddress\", port");
         System.exit(1);
     }
+    System.out.println("Beginning PduListenerSaver (" + multicastAddress + ":" + port + ") to directory " + outputDirectory);
 
-    System.out.println("Beginning pdu save to directory " + outputDirectoryPath);
-    
-    PduRecorder pduRecorder = new PduRecorder(outputDirectoryPath, multicastAddress, port); // assumes save
     mystate state = mystate.RUNNING;
-    Scanner scan  = new Scanner(System.in);
-
+    Scanner terminalKeyboardScanner  = new Scanner(System.in);
+    PduRecorder pduRecorder = new PduRecorder(outputDirectory, multicastAddress, port); // assumes save
+    pduRecorder.setDescriptor("PduListenerSaver");
+    pduRecorder.start(); // begin running
+    
     while (true) // monitor user input via keyboard
     {
         System.out.println("Type p/enter to pause, r/enter to resume, q/enter to quit");
-        String line = scan.nextLine();
+            String line = terminalKeyboardScanner.nextLine();
         if (line.equalsIgnoreCase("p") && state == mystate.RUNNING) 
         {
-            pduRecorder.stopPause();
+            pduRecorder.pause();
             state = mystate.PAUSED;
             System.out.println("... state is now PAUSED");
         }
         else if (line.equalsIgnoreCase("p")) 
         {
-            pduRecorder.stopPause();
+            pduRecorder.pause();
             state = mystate.PAUSED;
             System.out.println("... state is still PAUSED");
         }
         else if (line.equalsIgnoreCase("r") && state == mystate.PAUSED) 
         {
-            pduRecorder.startResume();
+            pduRecorder.resume();
             state = mystate.RUNNING;
             System.out.println("... state is now RUNNING");
         }
         else if (line.equalsIgnoreCase("r")) 
         {
-            pduRecorder.startResume();
+            pduRecorder.resume();
             state = mystate.RUNNING;
             System.out.println("... state is still RUNNING");
         }
         else if (line.equalsIgnoreCase("q")) 
         {
-            pduRecorder.end();
+            pduRecorder.stop();
             System.out.println("... QUIT");
             break;
         }
     }
-    System.out.println("Ending pdu save to log file " + pduRecorder.getLogFilePath());
+        System.out.println("Finished PduListenerSaver pdu recording, saved to file:");
+        System.out.println(pduRecorder.getLogFilePath());
   }
 }
diff --git a/src/edu/nps/moves/dis7/examples/PduListenerSaverLog.dislog b/src/edu/nps/moves/dis7/examples/PduListenerSaverLog.dislog
index 5bf3d437e1..9c4c189da4 100644
--- a/src/edu/nps/moves/dis7/examples/PduListenerSaverLog.dislog
+++ b/src/edu/nps/moves/dis7/examples/PduListenerSaverLog.dislog
@@ -1,74 +1,74 @@
-# Start, ENCODING_PLAINTEXT, 20200825_224928, DIS capture file, .\pduLog\PduCaptureLog1.dislog
-[0,0,0,0,0,0,0,0],[7,0,15,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0] # DISPDUType: 15 ACKNOWLEDGE
-[0,0,0,0,1,0,-102,-96],[7,0,55,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0] # DISPDUType: 55 ACKNOWLEDGE_RELIABLE
-[0,0,0,0,1,7,-12,68],[7,0,16,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DISPDUType: 16 ACTION_REQUEST
-[0,0,0,0,1,46,60,-88],[7,0,56,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DISPDUType: 56 ACTION_REQUEST_RELIABLE
-[0,0,0,0,1,85,-51,-112],[7,0,17,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DISPDUType: 17 ACTION_RESPONSE
-[0,0,0,0,1,115,65,104],[7,0,57,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DISPDUType: 57 ACTION_RESPONSE_RELIABLE
-[0,0,0,0,1,120,-39,12],[7,0,33,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DISPDUType: 33 AGGREGATE_STATE
-[0,0,0,0,2,117,-88,48],[7,0,47,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DISPDUType: 47 APPEARANCE
-[0,0,0,0,3,26,53,48],[7,0,45,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DISPDUType: 45 AREAL_OBJECT_STATE
-[0,0,0,0,3,107,12,-128],[7,0,48,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DISPDUType: 48 ARTICULATED_PARTS
-[0,0,0,0,3,111,-72,-104],[7,0,72,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0] # DISPDUType: 72 ATTRIBUTE
-[0,0,0,0,5,86,117,72],[7,0,66,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DISPDUType: 66 COLLISION_ELASTIC
-[0,0,0,0,5,106,87,-124],[7,0,4,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DISPDUType: 4 COLLISION
-[0,0,0,0,5,-127,29,-104],[7,0,22,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DISPDUType: 22 COMMENT
-[0,0,0,0,5,-123,66,-120],[7,0,62,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DISPDUType: 62 COMMENT_RELIABLE
-[0,0,0,0,5,-119,-48,-16],[7,0,11,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DISPDUType: 11 CREATE_ENTITY
-[0,0,0,0,5,-115,-74,-104],[7,0,51,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DISPDUType: 51 CREATE_ENTITY_RELIABLE
-[0,0,0,0,5,-110,12,92],[7,0,20,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DISPDUType: 20 DATA
-[0,0,0,0,5,-105,61,-88],[7,0,18,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DISPDUType: 18 DATA_QUERY
-[0,0,0,0,5,-100,-124,12],[7,0,58,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DISPDUType: 58 DATA_QUERY_RELIABLE
-[0,0,0,0,5,-94,-84,56],[7,0,60,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DISPDUType: 60 DATA_RELIABLE
-[0,0,0,0,5,-88,-30,16],[7,0,24,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DISPDUType: 24 DESIGNATOR
-[0,0,0,0,5,-19,49,44],[7,0,3,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DISPDUType: 3 DETONATION
-[0,0,0,0,6,110,-53,-80],[7,0,68,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DISPDUType: 68 DIRECTED_ENERGY_FIRE
-[0,0,0,0,6,-80,30,88],[7,0,23,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DISPDUType: 23 ELECTROMAGNETIC_EMISSION
-[0,0,0,0,6,-38,0,56],[7,0,69,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DISPDUType: 69 ENTITY_DAMAGE_STATUS
-[0,0,0,0,6,-32,79,16],[7,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DISPDUType: 1 ENTITY_STATE
-[0,0,0,0,7,10,-126,-108],[7,0,67,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DISPDUType: 67 ENTITY_STATE_UPDATE
-[0,0,0,0,7,16,-15,16],[7,0,41,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DISPDUType: 41 ENVIRONMENTAL_PROCESS
-[0,0,0,0,7,58,1,-112],[7,0,21,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DISPDUType: 21 EVENT_REPORT
-[0,0,0,0,7,89,51,-128],[7,0,61,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DISPDUType: 61 EVENT_REPORT_RELIABLE
-[0,0,0,0,7,95,25,-88],[7,0,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DISPDUType: 2 FIRE
-[0,0,0,0,7,103,3,-44],[7,0,42,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DISPDUType: 42 GRIDDED_DATA
-[0,0,0,0,7,-119,-127,-24],[7,0,28,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DISPDUType: 28 IDENTIFICATION_FRIEND_OR_FOE
-[0,0,0,0,7,-27,-106,44],[7,0,70,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DISPDUType: 70 INFORMATION_OPERATIONS_ACTION
-[0,0,0,0,8,36,72,-112],[7,0,71,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DISPDUType: 71 INFORMATION_OPERATIONS_REPORT
-[0,0,0,0,8,61,24,32],[7,0,32,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DISPDUType: 32 INTERCOM_CONTROL
-[0,0,0,0,8,127,29,76],[7,0,31,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,0,0,0,0] # DISPDUType: 31 INTERCOM_SIGNAL
-[0,0,0,0,8,-72,112,76],[7,0,34,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DISPDUType: 34 ISGROUPOF
-[0,0,0,0,8,-41,-109,100],[7,0,36,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DISPDUType: 36 ISPARTOF
-[0,0,0,0,9,22,30,84],[7,0,44,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DISPDUType: 44 LINEAR_OBJECT_STATE
-[0,0,0,0,9,26,-26,-16],[7,0,50,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DISPDUType: 50 LIVE_ENTITY_DETONATION
-[0,0,0,0,9,76,-112,56],[7,0,49,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DISPDUType: 49 LIVE_ENTITY_FIRE
-[0,0,0,0,9,83,26,-44],[7,0,39,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DISPDUType: 39 MINEFIELD_DATA
-[0,0,0,0,9,115,16,-36],[7,0,38,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DISPDUType: 38 MINEFIELD_QUERY
-[0,0,0,0,9,120,-16,-60],[7,0,40,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DISPDUType: 40 MINEFIELD_RESPONSE_NACK
-[0,0,0,0,9,123,-79,16],[7,0,37,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DISPDUType: 37 MINEFIELD_STATE
-[0,0,0,0,9,-72,-111,112],[7,0,43,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DISPDUType: 43 POINT_OBJECT_STATE
-[0,0,0,0,10,0,-67,56],[7,0,27,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DISPDUType: 27 RECEIVER
-[0,0,0,0,10,22,-37,84],[7,0,65,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DISPDUType: 65 RECORD_QUERY_RELIABLE
-[0,0,0,0,10,41,-33,76],[7,0,63,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DISPDUType: 63 RECORD_RELIABLE
-[0,0,0,0,10,61,79,20],[7,0,12,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DISPDUType: 12 REMOVE_ENTITY
-[0,0,0,0,10,64,-77,12],[7,0,52,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DISPDUType: 52 REMOVE_ENTITY_RELIABLE
-[0,0,0,0,10,68,-24,100],[7,0,9,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DISPDUType: 9 REPAIR_COMPLETE
-[0,0,0,0,10,94,120,36],[7,0,10,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DISPDUType: 10 REPAIR_RESPONSE
-[0,0,0,0,10,108,46,-80],[7,0,8,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DISPDUType: 8 RESUPPLY_CANCEL
-[0,0,0,0,10,110,107,-68],[7,0,6,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DISPDUType: 6 RESUPPLY_OFFER
-[0,0,0,0,10,113,95,-104],[7,0,7,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DISPDUType: 7 RESUPPLY_RECEIVED
-[0,0,0,0,10,116,17,12],[7,0,5,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DISPDUType: 5 SERVICE_REQUEST
-[0,0,0,0,10,-128,-4,120],[7,0,19,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DISPDUType: 19 SET_DATA
-[0,0,0,0,10,-124,64,-52],[7,0,59,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DISPDUType: 59 SET_DATA_RELIABLE
-[0,0,0,0,10,-121,-2,-100],[7,0,64,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DISPDUType: 64 SET_RECORD_RELIABLE
-[0,0,0,0,10,-118,-18,-112],[7,0,26,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,0,0,0,0] # DISPDUType: 26 SIGNAL
-[0,0,0,0,10,-115,-23,116],[7,0,13,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DISPDUType: 13 START_RESUME
-[0,0,0,0,10,-112,-56,56],[7,0,53,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DISPDUType: 53 START_RESUME_RELIABLE
-[0,0,0,0,10,-109,-82,4],[7,0,14,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DISPDUType: 14 STOP_FREEZE
-[0,0,0,0,10,-79,47,-20],[7,0,54,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DISPDUType: 54 STOP_FREEZE_RELIABLE
-[0,0,0,0,10,-76,106,24],[7,0,30,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DISPDUType: 30 SUPPLEMENTAL_EMISSION_ENTITY_STATE
-[0,0,0,0,10,-73,110,92],[7,0,46,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DISPDUType: 46 TIME_SPACE_POSITION_INFORMATION
-[0,0,0,0,10,-28,80,52],[7,0,35,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DISPDUType: 35 TRANSFER_OWNERSHIP
-[0,0,0,0,10,-5,110,44],[7,0,25,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DISPDUType: 25 TRANSMITTER
-[0,0,0,0,11,-124,-12,108],[7,0,29,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DISPDUType: 29 UNDERWATER_ACOUSTIC
-# Finish, ENCODING_PLAINTEXT, 20200825_225020, DIS capture file, .\pduLog\PduCaptureLog1.dislog
+# Start, ENCODING_PLAINTEXT, 20210828_201126, DIS capture file, .\pduLog\PduCaptureLog.dislog
+[0,0,0,0,0,0,0,0],[7,0,15,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0] # DisPduType 15 ACKNOWLEDGE
+[0,0,0,0,1,85,-60,-8],[7,0,55,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0] # DisPduType 55 ACKNOWLEDGE_RELIABLE
+[0,0,0,0,1,119,20,80],[7,0,16,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DisPduType 16 ACTION_REQUEST
+[0,0,0,0,1,-83,21,-76],[7,0,56,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DisPduType 56 ACTION_REQUEST_RELIABLE
+[0,0,0,0,1,-33,-102,-124],[7,0,17,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DisPduType 17 ACTION_RESPONSE
+[0,0,0,0,2,8,119,-40],[7,0,57,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DisPduType 57 ACTION_RESPONSE_RELIABLE
+[0,0,0,0,2,20,61,-24],[7,0,33,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DisPduType 33 AGGREGATE_STATE
+[0,0,0,0,4,11,-118,112],[7,0,47,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DisPduType 47 APPEARANCE
+[0,0,0,0,5,45,-119,-28],[7,0,45,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DisPduType 45 AREAL_OBJECT_STATE
+[0,0,0,0,5,-41,-110,4],[7,0,48,11,0,0,0,0,0,0,0,0,0,0,0,0,0] # DisPduType 48 ARTICULATED_PARTS
+[0,0,0,0,5,-26,40,100],[7,0,72,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0] # DisPduType 72 ATTRIBUTE
+[0,0,0,0,7,-6,62,116],[7,0,66,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DisPduType 66 COLLISION_ELASTIC
+[0,0,0,0,8,29,55,-8],[7,0,4,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DisPduType 04 COLLISION
+[0,0,0,0,8,53,-72,60],[7,0,22,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DisPduType 22 COMMENT
+[0,0,0,0,8,61,102,-92],[7,0,62,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DisPduType 62 COMMENT_RELIABLE
+[0,0,0,0,8,70,15,112],[7,0,11,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DisPduType 11 CREATE_ENTITY
+[0,0,0,0,8,75,117,120],[7,0,51,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DisPduType 51 CREATE_ENTITY_RELIABLE
+[0,0,0,0,8,84,29,24],[7,0,20,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DisPduType 20 DATA
+[0,0,0,0,8,97,-102,-100],[7,0,18,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DisPduType 18 DATA_QUERY
+[0,0,0,0,8,107,124,76],[7,0,58,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DisPduType 58 DATA_QUERY_RELIABLE
+[0,0,0,0,8,-128,86,-8],[7,0,60,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DisPduType 60 DATA_RELIABLE
+[0,0,0,0,8,-113,-69,-4],[7,0,24,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DisPduType 24 DESIGNATOR
+[0,0,0,0,9,33,-106,-88],[7,0,3,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DisPduType 03 DETONATION
+[0,0,0,0,10,74,106,-116],[7,0,68,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DisPduType 68 DIRECTED_ENERGY_FIRE
+[0,0,0,0,10,-73,47,120],[7,0,23,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DisPduType 23 ELECTROMAGNETIC_EMISSION
+[0,0,0,0,10,-43,-32,-128],[7,0,69,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DisPduType 69 ENTITY_DAMAGE_STATUS
+[0,0,0,0,10,-32,72,44],[7,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DisPduType 01 ENTITY_STATE
+[0,0,0,0,11,39,127,8],[7,0,67,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DisPduType 67 ENTITY_STATE_UPDATE
+[0,0,0,0,11,51,46,112],[7,0,41,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DisPduType 41 ENVIRONMENTAL_PROCESS
+[0,0,0,0,11,-114,-24,20],[7,0,21,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DisPduType 21 EVENT_REPORT
+[0,0,0,0,11,-79,28,84],[7,0,61,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DisPduType 61 EVENT_REPORT_RELIABLE
+[0,0,0,0,11,-70,-91,-68],[7,0,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DisPduType 02 FIRE
+[0,0,0,0,11,-56,-33,-120],[7,0,42,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DisPduType 42 GRIDDED_DATA
+[0,0,0,0,12,25,-24,116],[7,0,28,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DisPduType 28 IDENTIFICATION_FRIEND_OR_FOE
+[0,0,0,0,12,-73,120,0],[7,0,70,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DisPduType 70 INFORMATION_OPERATIONS_ACTION
+[0,0,0,0,13,26,-94,-72],[7,0,71,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DisPduType 71 INFORMATION_OPERATIONS_REPORT
+[0,0,0,0,13,70,109,-88],[7,0,32,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DisPduType 32 INTERCOM_CONTROL
+[0,0,0,0,13,-98,76,48],[7,0,31,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DisPduType 31 INTERCOM_SIGNAL
+[0,0,0,0,13,-22,92,-40],[7,0,34,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DisPduType 34 ISGROUPOF
+[0,0,0,0,14,53,76,-44],[7,0,36,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DisPduType 36 ISPARTOF
+[0,0,0,0,14,-79,49,-96],[7,0,44,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DisPduType 44 LINEAR_OBJECT_STATE
+[0,0,0,0,14,-68,-96,48],[7,0,50,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DisPduType 50 LIVE_ENTITY_DETONATION
+[0,0,0,0,15,29,43,108],[7,0,49,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DisPduType 49 LIVE_ENTITY_FIRE
+[0,0,0,0,15,57,-40,112],[7,0,39,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DisPduType 39 MINEFIELD_DATA
+[0,0,0,0,15,-123,25,-84],[7,0,38,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DisPduType 38 MINEFIELD_QUERY
+[0,0,0,0,15,-112,82,84],[7,0,40,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DisPduType 40 MINEFIELD_RESPONSE_NACK
+[0,0,0,0,15,-105,81,-68],[7,0,37,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DisPduType 37 MINEFIELD_STATE
+[0,0,0,0,16,50,-70,28],[7,0,43,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DisPduType 43 POINT_OBJECT_STATE
+[0,0,0,0,16,-19,34,108],[7,0,27,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DisPduType 27 RECEIVER
+[0,0,0,0,17,19,-24,-4],[7,0,65,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DisPduType 65 RECORD_QUERY_RELIABLE
+[0,0,0,0,17,52,-70,-16],[7,0,63,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DisPduType 63 RECORD_RELIABLE
+[0,0,0,0,17,82,-121,16],[7,0,12,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DisPduType 12 REMOVE_ENTITY
+[0,0,0,0,17,88,102,48],[7,0,52,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DisPduType 52 REMOVE_ENTITY_RELIABLE
+[0,0,0,0,17,98,-102,-80],[7,0,9,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DisPduType 09 REPAIR_COMPLETE
+[0,0,0,0,17,127,-17,72],[7,0,10,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DisPduType 10 REPAIR_RESPONSE
+[0,0,0,0,17,-107,-122,-96],[7,0,8,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DisPduType 08 RESUPPLY_CANCEL
+[0,0,0,0,17,-102,-98,-120],[7,0,6,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DisPduType 06 RESUPPLY_OFFER
+[0,0,0,0,17,-93,10,0],[7,0,7,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DisPduType 07 RESUPPLY_RECEIVED
+[0,0,0,0,17,-87,52,32],[7,0,5,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DisPduType 05 SERVICE_REQUEST
+[0,0,0,0,17,-59,61,20],[7,0,19,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DisPduType 19 SET_DATA
+[0,0,0,0,17,-52,-25,48],[7,0,59,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DisPduType 59 SET_DATA_RELIABLE
+[0,0,0,0,17,-42,-79,112],[7,0,64,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DisPduType 64 SET_RECORD_RELIABLE
+[0,0,0,0,17,-32,-108,76],[7,0,26,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DisPduType 26 SIGNAL
+[0,0,0,0,17,-24,119,12],[7,0,13,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DisPduType 13 START_RESUME
+[0,0,0,0,17,-19,-65,0],[7,0,53,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DisPduType 53 START_RESUME_RELIABLE
+[0,0,0,0,17,-12,-102,-36],[7,0,14,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DisPduType 14 STOP_FREEZE
+[0,0,0,0,18,63,-27,20],[7,0,54,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DisPduType 54 STOP_FREEZE_RELIABLE
+[0,0,0,0,18,74,26,-64],[7,0,30,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DisPduType 30 SUPPLEMENTAL_EMISSION_ENTITY_STATE
+[0,0,0,0,18,83,-77,100],[7,0,46,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DisPduType 46 TIME_SPACE_POSITION_INFORMATION
+[0,0,0,0,18,-84,119,56],[7,0,35,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DisPduType 35 TRANSFER_OWNERSHIP
+[0,0,0,0,18,-37,-111,-48],[7,0,25,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DisPduType 25 TRANSMITTER
+[0,0,0,0,19,-44,61,48],[7,0,29,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DisPduType 29 UNDERWATER_ACOUSTIC
+# Finish, ENCODING_PLAINTEXT, 20210828_201139, DIS capture file, .\pduLog\PduCaptureLog.dislog
diff --git a/src/edu/nps/moves/dis7/examples/PduListenerSaverLog.txt b/src/edu/nps/moves/dis7/examples/PduListenerSaverLog.txt
index d7b71fbc11..5fc3a2cb2c 100644
--- a/src/edu/nps/moves/dis7/examples/PduListenerSaverLog.txt
+++ b/src/edu/nps/moves/dis7/examples/PduListenerSaverLog.txt
@@ -1,83 +1,94 @@
-ant -f C:\\x3d-github\\open-dis7-java -Dnb.internal.action.name=run.single -Djavac.includes=edu/nps/moves/dis7/examples/EspduReceiverNIO.java -Drun.class=edu.nps.moves.dis7.examples.EspduReceiverNIO run-single
+ant -f C:\\x3d-github\\open-dis7-java -Dnb.internal.action.name=run.single -Djavac.includes=edu/nps/moves/dis7/examples/PduListenerSaver.java -Drun.class=edu.nps.moves.dis7.examples.PduListenerSaver run-single
 init:
-Deleting: C:\x3d-github\open-dis7-java\build\built-jar.properties
 deps-jar:
-Updating property file: C:\x3d-github\open-dis7-java\build\built-jar.properties
 Compiling 1 source file to C:\x3d-github\open-dis7-java\build\classes
 warning: [options] bootstrap class path not set in conjunction with -source 8
 1 warning
 compile-single:
 run-single:
-Using network interface Intel(R) Dual Band Wireless-AC 8260
-1. got PDU of type: AcknowledgePdu
-2. got PDU of type: AcknowledgeReliablePdu
-3. got PDU of type: ActionRequestPdu
-4. got PDU of type: ActionRequestReliablePdu
-5. got PDU of type: ActionResponsePdu
-6. got PDU of type: ActionResponseReliablePdu
-7. got PDU of type: AggregateStatePdu
-8. got PDU of type: AppearancePdu
-9. got PDU of type: ArealObjectStatePdu
-10. got PDU of type: ArticulatedPartsPdu
-11. got PDU of type: AttributePdu
-12. got PDU of type: CollisionElasticPdu
-13. got PDU of type: CollisionPdu
-14. got PDU of type: CommentPdu
-15. got PDU of type: CommentReliablePdu
-16. got PDU of type: CreateEntityPdu
-17. got PDU of type: CreateEntityReliablePdu
-18. got PDU of type: DataPdu
-19. got PDU of type: DataQueryPdu
-20. got PDU of type: DataQueryReliablePdu
-21. got PDU of type: DataReliablePdu
-22. got PDU of type: DesignatorPdu
-23. got PDU of type: DetonationPdu
-24. got PDU of type: DirectedEnergyFirePdu
-25. got PDU of type: ElectromagneticEmissionPdu
-26. got PDU of type: EntityDamageStatusPdu
-27. got PDU of type: EntityStatePdu
-28. got PDU of type: EntityStateUpdatePdu
-29. got PDU of type: EnvironmentalProcessPdu
-30. got PDU of type: EventReportPdu
-31. got PDU of type: EventReportReliablePdu
-32. got PDU of type: FirePdu
-33. got PDU of type: GriddedDataPdu
-34. got PDU of type: IFFPdu
-35. got PDU of type: InformationOperationsActionPdu
-36. got PDU of type: InformationOperationsReportPdu
-37. got PDU of type: IntercomControlPdu
-38. got PDU of type: IntercomSignalPdu
-39. got PDU of type: IsGroupOfPdu
-40. got PDU of type: IsPartOfPdu
-41. got PDU of type: LinearObjectStatePdu
-42. got PDU of type: LEDetonationPdu
-43. got PDU of type: LEFirePdu
-44. got PDU of type: MinefieldDataPdu
-45. got PDU of type: MinefieldQueryPdu
-46. got PDU of type: MinefieldResponseNACKPdu
-47. got PDU of type: MinefieldStatePdu
-48. got PDU of type: PointObjectStatePdu
-49. got PDU of type: ReceiverPdu
-50. got PDU of type: RecordQueryReliablePdu
-51. got PDU of type: RecordReliablePdu
-52. got PDU of type: RemoveEntityPdu
-53. got PDU of type: RemoveEntityReliablePdu
-54. got PDU of type: RepairCompletePdu
-55. got PDU of type: RepairResponsePdu
-56. got PDU of type: ResupplyCancelPdu
-57. got PDU of type: ResupplyOfferPdu
-58. got PDU of type: ResupplyReceivedPdu
-59. got PDU of type: ServiceRequestPdu
-60. got PDU of type: SetDataPdu
-61. got PDU of type: SetDataReliablePdu
-62. got PDU of type: SetRecordReliablePdu
-63. got PDU of type: SignalPdu
-64. got PDU of type: StartResumePdu
-65. got PDU of type: StartResumeReliablePdu
-66. got PDU of type: StopFreezePdu
-67. got PDU of type: StopFreezeReliablePdu
-68. got PDU of type: SEESPdu
-69. got PDU of type: TSPIPdu
-70. got PDU of type: TransferOwnershipPdu
-71. got PDU of type: TransmitterPdu
-72. got PDU of type: UnderwaterAcousticPdu
+edu.nps.moves.dis.examples.PduListenerSaver started...
+Beginning PduListenerSaver (239.1.2.3:3000) to directory ./pduLog
+Recorder log file open: C:\x3d-github\open-dis7-java\pduLog\PduCaptureLog.dislog
+[DisThreadedNetworkInterface] using network interface Intel(R) Centrino(R) Ultimate-N 6300 AGN
+[DisThreadedNetworkInterface] datagramSocket.joinGroup  address=239.1.2.3 port=3000 start() complete
+[PduRecorder PduListenerSaver] listening to IP address 239.1.2.3 on port 3000
+Type p/enter to pause, r/enter to resume, q/enter to quit
+[DisThreadedNetworkInterface PduListenerSaver] [receipt  1] DisPduType 15 ACKNOWLEDGE, size 32 bytes)
+[DisThreadedNetworkInterface PduListenerSaver] [receipt  2] DisPduType 55 ACKNOWLEDGE_RELIABLE, size 32 bytes)
+[DisThreadedNetworkInterface PduListenerSaver] [receipt  3] DisPduType 16 ACTION_REQUEST, size 40 bytes)
+[DisThreadedNetworkInterface PduListenerSaver] [receipt  4] DisPduType 56 ACTION_REQUEST_RELIABLE, size 44 bytes)
+[DisThreadedNetworkInterface PduListenerSaver] [receipt  5] DisPduType 17 ACTION_RESPONSE, size 40 bytes)
+[DisThreadedNetworkInterface PduListenerSaver] [receipt  6] DisPduType 57 ACTION_RESPONSE_RELIABLE, size 40 bytes)
+[DisThreadedNetworkInterface PduListenerSaver] [receipt  7] DisPduType 33 AGGREGATE_STATE, size 136 bytes)
+[DisThreadedNetworkInterface PduListenerSaver] [receipt  8] DisPduType 47 APPEARANCE, size 67 bytes)
+[DisThreadedNetworkInterface PduListenerSaver] [receipt  9] DisPduType 45 AREAL_OBJECT_STATE, size 49 bytes)
+[DisThreadedNetworkInterface PduListenerSaver] [receipt 10] DisPduType 48 ARTICULATED_PARTS, size 17 bytes)
+[DisThreadedNetworkInterface PduListenerSaver] [receipt 11] DisPduType 72 ATTRIBUTE, size 32 bytes)
+[DisThreadedNetworkInterface PduListenerSaver] [receipt 12] DisPduType 66 COLLISION_ELASTIC, size 100 bytes)
+[DisThreadedNetworkInterface PduListenerSaver] [receipt 13] DisPduType 04 COLLISION, size 60 bytes)
+[DisThreadedNetworkInterface PduListenerSaver] [receipt 14] DisPduType 22 COMMENT, size 32 bytes)
+[DisThreadedNetworkInterface PduListenerSaver] [receipt 15] DisPduType 62 COMMENT_RELIABLE, size 32 bytes)
+[DisThreadedNetworkInterface PduListenerSaver] [receipt 16] DisPduType 11 CREATE_ENTITY, size 28 bytes)
+[DisThreadedNetworkInterface PduListenerSaver] [receipt 17] DisPduType 51 CREATE_ENTITY_RELIABLE, size 32 bytes)
+[DisThreadedNetworkInterface PduListenerSaver] [receipt 18] DisPduType 20 DATA, size 40 bytes)
+[DisThreadedNetworkInterface PduListenerSaver] [receipt 19] DisPduType 18 DATA_QUERY, size 40 bytes)
+[DisThreadedNetworkInterface PduListenerSaver] [receipt 20] DisPduType 58 DATA_QUERY_RELIABLE, size 44 bytes)
+[DisThreadedNetworkInterface PduListenerSaver] [receipt 21] DisPduType 60 DATA_RELIABLE, size 40 bytes)
+[DisThreadedNetworkInterface PduListenerSaver] [receipt 22] DisPduType 24 DESIGNATOR, size 88 bytes)
+[DisThreadedNetworkInterface PduListenerSaver] [receipt 23] DisPduType 03 DETONATION, size 104 bytes)
+[DisThreadedNetworkInterface PduListenerSaver] [receipt 24] DisPduType 68 DIRECTED_ENERGY_FIRE, size 88 bytes)
+[DisThreadedNetworkInterface PduListenerSaver] [receipt 25] DisPduType 23 ELECTROMAGNETIC_EMISSION, size 28 bytes)
+[DisThreadedNetworkInterface PduListenerSaver] [receipt 26] DisPduType 69 ENTITY_DAMAGE_STATUS, size 24 bytes)
+[DisThreadedNetworkInterface PduListenerSaver] [receipt 27] DisPduType 01 ENTITY_STATE, size 144 bytes)
+[DisThreadedNetworkInterface PduListenerSaver] [receipt 28] DisPduType 67 ENTITY_STATE_UPDATE, size 72 bytes)
+[DisThreadedNetworkInterface PduListenerSaver] [receipt 29] DisPduType 41 ENVIRONMENTAL_PROCESS, size 32 bytes)
+[DisThreadedNetworkInterface PduListenerSaver] [receipt 30] DisPduType 21 EVENT_REPORT, size 40 bytes)
+[DisThreadedNetworkInterface PduListenerSaver] [receipt 31] DisPduType 61 EVENT_REPORT_RELIABLE, size 40 bytes)
+[DisThreadedNetworkInterface PduListenerSaver] [receipt 32] DisPduType 02 FIRE, size 96 bytes)
+[DisThreadedNetworkInterface PduListenerSaver] [receipt 33] DisPduType 42 GRIDDED_DATA, size 64 bytes)
+[DisThreadedNetworkInterface PduListenerSaver] [receipt 34] DisPduType 28 IDENTIFICATION_FRIEND_OR_FOE, size 60 bytes)
+[DisThreadedNetworkInterface PduListenerSaver] [receipt 35] DisPduType 70 INFORMATION_OPERATIONS_ACTION, size 56 bytes)
+[DisThreadedNetworkInterface PduListenerSaver] [receipt 36] DisPduType 71 INFORMATION_OPERATIONS_REPORT, size 40 bytes)
+[DisThreadedNetworkInterface PduListenerSaver] [receipt 37] DisPduType 32 INTERCOM_CONTROL, size 40 bytes)
+[DisThreadedNetworkInterface PduListenerSaver] [receipt 38] DisPduType 31 INTERCOM_SIGNAL, size 32 bytes)
+[DisThreadedNetworkInterface PduListenerSaver] [receipt 39] DisPduType 34 ISGROUPOF, size 40 bytes)
+[DisThreadedNetworkInterface PduListenerSaver] [receipt 40] DisPduType 36 ISPARTOF, size 52 bytes)
+[DisThreadedNetworkInterface PduListenerSaver] [receipt 41] DisPduType 44 LINEAR_OBJECT_STATE, size 40 bytes)
+[DisThreadedNetworkInterface PduListenerSaver] [receipt 42] DisPduType 50 LIVE_ENTITY_DETONATION, size 79 bytes)
+[DisThreadedNetworkInterface PduListenerSaver] [receipt 43] DisPduType 49 LIVE_ENTITY_FIRE, size 67 bytes)
+[DisThreadedNetworkInterface PduListenerSaver] [receipt 44] DisPduType 39 MINEFIELD_DATA, size 44 bytes)
+[DisThreadedNetworkInterface PduListenerSaver] [receipt 45] DisPduType 38 MINEFIELD_QUERY, size 40 bytes)
+[DisThreadedNetworkInterface PduListenerSaver] [receipt 46] DisPduType 40 MINEFIELD_RESPONSE_NACK, size 26 bytes)
+[DisThreadedNetworkInterface PduListenerSaver] [receipt 47] DisPduType 37 MINEFIELD_STATE, size 72 bytes)
+[DisThreadedNetworkInterface PduListenerSaver] [receipt 48] DisPduType 43 POINT_OBJECT_STATE, size 91 bytes)
+[DisThreadedNetworkInterface PduListenerSaver] [receipt 49] DisPduType 27 RECEIVER, size 36 bytes)
+[DisThreadedNetworkInterface PduListenerSaver] [receipt 50] DisPduType 65 RECORD_QUERY_RELIABLE, size 40 bytes)
+[DisThreadedNetworkInterface PduListenerSaver] [receipt 51] DisPduType 63 RECORD_RELIABLE, size 36 bytes)
+[DisThreadedNetworkInterface PduListenerSaver] [receipt 52] DisPduType 12 REMOVE_ENTITY, size 28 bytes)
+[DisThreadedNetworkInterface PduListenerSaver] [receipt 53] DisPduType 52 REMOVE_ENTITY_RELIABLE, size 32 bytes)
+[DisThreadedNetworkInterface PduListenerSaver] [receipt 54] DisPduType 09 REPAIR_COMPLETE, size 28 bytes)
+[DisThreadedNetworkInterface PduListenerSaver] [receipt 55] DisPduType 10 REPAIR_RESPONSE, size 28 bytes)
+[DisThreadedNetworkInterface PduListenerSaver] [receipt 56] DisPduType 08 RESUPPLY_CANCEL, size 24 bytes)
+[DisThreadedNetworkInterface PduListenerSaver] [receipt 57] DisPduType 06 RESUPPLY_OFFER, size 28 bytes)
+[DisThreadedNetworkInterface PduListenerSaver] [receipt 58] DisPduType 07 RESUPPLY_RECEIVED, size 28 bytes)
+[DisThreadedNetworkInterface PduListenerSaver] [receipt 59] DisPduType 05 SERVICE_REQUEST, size 28 bytes)
+[DisThreadedNetworkInterface PduListenerSaver] [receipt 60] DisPduType 19 SET_DATA, size 40 bytes)
+[DisThreadedNetworkInterface PduListenerSaver] [receipt 61] DisPduType 59 SET_DATA_RELIABLE, size 40 bytes)
+[DisThreadedNetworkInterface PduListenerSaver] [receipt 62] DisPduType 64 SET_RECORD_RELIABLE, size 40 bytes)
+[DisThreadedNetworkInterface PduListenerSaver] [receipt 63] DisPduType 26 SIGNAL, size 32 bytes)
+[DisThreadedNetworkInterface PduListenerSaver] [receipt 64] DisPduType 13 START_RESUME, size 44 bytes)
+[DisThreadedNetworkInterface PduListenerSaver] [receipt 65] DisPduType 53 START_RESUME_RELIABLE, size 48 bytes)
+[DisThreadedNetworkInterface PduListenerSaver] [receipt 66] DisPduType 14 STOP_FREEZE, size 40 bytes)
+[DisThreadedNetworkInterface PduListenerSaver] [receipt 67] DisPduType 54 STOP_FREEZE_RELIABLE, size 40 bytes)
+[DisThreadedNetworkInterface PduListenerSaver] [receipt 68] DisPduType 30 SUPPLEMENTAL_EMISSION_ENTITY_STATE, size 28 bytes)
+[DisThreadedNetworkInterface PduListenerSaver] [receipt 69] DisPduType 46 TIME_SPACE_POSITION_INFORMATION, size 54 bytes)
+[DisThreadedNetworkInterface PduListenerSaver] [receipt 70] DisPduType 35 TRANSFER_OWNERSHIP, size 40 bytes)
+[DisThreadedNetworkInterface PduListenerSaver] [receipt 71] DisPduType 25 TRANSMITTER, size 107 bytes)
+[DisThreadedNetworkInterface PduListenerSaver] [receipt 72] DisPduType 29 UNDERWATER_ACOUSTIC, size 32 bytes)
+Q
+
+Closing recorder log file: C:\x3d-github\open-dis7-java\pduLog\PduCaptureLog.dislog
+... QUIT
+Finished PduListenerSaver pdu recording, saved to file:
+C:\x3d-github\open-dis7-java\.\pduLog\PduCaptureLog.dislog
+BUILD SUCCESSFUL (total time: 33 seconds)
diff --git a/src/edu/nps/moves/dis7/examples/PduReaderPlayer.java b/src/edu/nps/moves/dis7/examples/PduReaderPlayer.java
index 16d8b4bb00..4f7ff249cc 100644
--- a/src/edu/nps/moves/dis7/examples/PduReaderPlayer.java
+++ b/src/edu/nps/moves/dis7/examples/PduReaderPlayer.java
@@ -14,6 +14,7 @@ import java.util.Scanner;
  * with PDU log playback console controls for resume, pause and quit.
  * 
  * PduSaver.java created on Aug 21, 2019
+ * Renamed PduReaderPlayer
  * MOVES Institute Naval Postgraduate School, Monterey, CA, USA www.nps.edu
  *
  * @author Mike Bailey, jmbailey@nps.edu
@@ -21,7 +22,12 @@ import java.util.Scanner;
  */
 public class PduReaderPlayer
 {
-  private final static String DEFAULT_OUTPUTDIR = "./pduLog";
+  private final static String DEFAULT_OUTPUT_DIRECTORY = "./pduLog";
+/** Default multicast group address we send on.
+    * @see <a href="https://en.wikipedia.org/wiki/Multicast_address">https://en.wikipedia.org/wiki/Multicast_address</a> */
+  public static final String  DEFAULT_MULTICAST_ADDRESS = DisThreadedNetworkInterface.DEFAULT_DIS_ADDRESS;
+  /** @see <a href="https://en.wikipedia.org/wiki/Port_(computer_networking)">https://en.wikipedia.org/wiki/Port_(computer_networking)</a> */
+  public static final int     DEFAULT_MULTICAST_PORT    = DisThreadedNetworkInterface.DEFAULT_DIS_PORT;
 
   private enum mystate
   {
@@ -29,51 +35,51 @@ public class PduReaderPlayer
     PAUSED;
   }
 
-  /** Command-line invocation (CLI)
+  /** Command-line invocation (CLI) of program, execution starts here
     * @param args command-line arguments
     */
   public static void main(String[] args)
   {
-    String outDir = DEFAULT_OUTPUTDIR;
-    String mcast = DisThreadedNetworkInterface.DEFAULT_MULTICAST_ADDRESS;
-    int port = DisThreadedNetworkInterface.DEFAULT_DIS_PORT;
-    boolean sendToNet = false;
+    String  outputDirectory = DEFAULT_OUTPUT_DIRECTORY;
+    String multicastAddress = DEFAULT_MULTICAST_ADDRESS;
+    int       multicastPort = DEFAULT_MULTICAST_PORT;
+    boolean       sendToNet = true;
+
+    System.out.println("edu.nps.moves.dis7.examples.PduReaderPlayer started...");
 
     switch (args.length) {
       case 0:
         break;
       case 1:
-        outDir = args[0];
+        outputDirectory = args[0];
         sendToNet = Boolean.valueOf(args[1]);
         break;
       case 3:
-        outDir = args[0];
-        mcast = args[1];
-        port = Integer.parseInt(args[2]);
-        break;
-      case 4:
-        outDir = args[0];
-        mcast = args[1];
-        port = Integer.parseInt(args[2]);
+        outputDirectory = args[0];
+        multicastAddress = args[1];
+        multicastPort = Integer.parseInt(args[2]);
         sendToNet = Boolean.valueOf(args[3]);
         break;
       default:
-        System.err.println("Usage: PduReaderPlayer() or "
-                + "PduReaderPlayer(\"outputdir\", \"sendToNet true/false\") or "
-                + "PduReaderPlayer(\"outputdir\", \"ipPort\", \"sendToNet true/false\") or "
+        System.err.println("Usage: PduReaderPlayer() or \n"
+                + "PduReaderPlayer(\"outputdir\", \"sendToNet true/false\") or \n"
+                + "PduReaderPlayer(\"outputdir\", \"ipPort\", \"sendToNet true/false\") or \n"
                 + "PduReaderPlayer(\"outputdir\", \"multicast address\", \"ipPort\", \"sendToNet true/false\"");
         System.exit(1);
     }
 
-    System.out.println("Beginning pdu playback from directory " + outDir);
-    try {
-      PduPlayer pduPlayer = new PduPlayer(mcast, port, Path.of(outDir), sendToNet);
+    System.out.println("Beginning PduReaderPlayer (" + multicastAddress + ":" + multicastPort + ") to directory " + outputDirectory);
+    try 
+    {
       mystate state = mystate.RUNNING;
-      Scanner scan = new Scanner(System.in);
+      Scanner terminalKeyboardScanner = new Scanner(System.in);
+      PduPlayer pduPlayer = new PduPlayer(multicastAddress, multicastPort, Path.of(outputDirectory), sendToNet);
+      pduPlayer.startResume();
 
-      while (true) {
+      while (true) // monitor user input via keyboard
+      {
         System.out.println("Type p/enter to pause, r/enter to resume, q/enter to quit");
-        String line = scan.nextLine();
+        String line = terminalKeyboardScanner.nextLine();
         if (line.equalsIgnoreCase("p") && state == mystate.RUNNING) {
           pduPlayer.stopPause();
           state = mystate.PAUSED;
@@ -83,11 +89,14 @@ public class PduReaderPlayer
           state = mystate.RUNNING;
         }
         else if (line.equalsIgnoreCase("q")) {
+          System.out.println("... QUIT");
           pduPlayer.end();
           break;
         }
       }
-      System.out.println("Ending pdu playback from "+outDir);
+      System.out.println("Ending pdu files playback for directory " + outputDirectory);
+      System.out.println("edu.nps.moves.dis7.examples.PduReaderPlayer complete.");
+      System.exit(0); // TODO not sure why this is necessary with Netbeans...
     }
     catch (IOException ex) {
       System.err.println("Exception: " + ex.getClass().getSimpleName() + ": " + ex.getLocalizedMessage());
diff --git a/src/edu/nps/moves/dis7/examples/PduReaderPlayerLog.txt b/src/edu/nps/moves/dis7/examples/PduReaderPlayerLog.txt
new file mode 100644
index 0000000000..8b13789179
--- /dev/null
+++ b/src/edu/nps/moves/dis7/examples/PduReaderPlayerLog.txt
@@ -0,0 +1 @@
+
-- 
GitLab