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