From 0655b096fde9f95dfd264bee8378a49d169a3ac4 Mon Sep 17 00:00:00 2001
From: brutzman <brutzman@nps.edu>
Date: Sat, 25 Jun 2022 21:12:52 -0700
Subject: [PATCH] more precise handling to PDU timestamp as double for seconds
 past hour

---
 .../nps/moves/dis7/utilities/DisChannel.java  | 108 +++++-------------
 1 file changed, 27 insertions(+), 81 deletions(-)

diff --git a/src/edu/nps/moves/dis7/utilities/DisChannel.java b/src/edu/nps/moves/dis7/utilities/DisChannel.java
index aa30ee2336..6d49cb1e3f 100644
--- a/src/edu/nps/moves/dis7/utilities/DisChannel.java
+++ b/src/edu/nps/moves/dis7/utilities/DisChannel.java
@@ -39,7 +39,8 @@ public class DisChannel
     private static final int       NETWORK_PORT_DEFAULT = 3000;
     private static final String  DEFAULT_PDULOG_OUTPUT_DIRECTORY = "./pduLog";
     
-    protected boolean verboseComments = true;
+    /** whether or not verbose comments are provided */
+    private boolean verboseComments = true;
     String networkAddress = NETWORK_ADDRESS_DEFAULT;
     int       networkPort = NETWORK_PORT_DEFAULT;
     static DisTime.TimestampStyle timestampStyle = DisTime.TimestampStyle.IEEE_ABSOLUTE;
@@ -56,25 +57,25 @@ public class DisChannel
     private boolean                                 verbosePduRecorder         = true;
           
     /** CommentPdu type providing a description, used for consistent reporting and logging. */
-    public final VariableRecordType COMMENTPDU_DESCRIPTION            = VariableRecordType.DESCRIPTION;
+    public final static VariableRecordType COMMENTPDU_DESCRIPTION            = VariableRecordType.DESCRIPTION;
     
     /** CommentPdu type providing an event report, used for consistent reporting and logging. */
-    public final VariableRecordType COMMENTPDU_NARRATIVE              = VariableRecordType.COMPLETE_EVENT_REPORT;
+    public final static VariableRecordType COMMENTPDU_NARRATIVE              = VariableRecordType.COMPLETE_EVENT_REPORT;
     
     /** CommentPdu type providing simulation program status, used for consistent reporting and logging. */
-    public final VariableRecordType COMMENTPDU_APPLICATION_STATUS      = VariableRecordType.APPLICATION_STATUS;
+    public final static VariableRecordType COMMENTPDU_APPLICATION_STATUS      = VariableRecordType.APPLICATION_STATUS;
     
     /** CommentPdu type documenting current elapsed time, used for consistent reporting and logging. */
-    public final VariableRecordType COMMENTPDU_ELAPSED_TIME            = VariableRecordType.ELAPSED_TIME;
+    public final static VariableRecordType COMMENTPDU_ELAPSED_TIME            = VariableRecordType.ELAPSED_TIME;
     
     /** CommentPdu type documenting simulation program timestep, used for consistent reporting and logging. */
-    public final VariableRecordType COMMENTPDU_SIMULATION_TIMESTEP     = VariableRecordType.APPLICATION_TIMESTEP;
+    public final static VariableRecordType COMMENTPDU_SIMULATION_TIMESTEP     = VariableRecordType.APPLICATION_TIMESTEP;
     
     /** CommentPdu type documenting simulation program time, used for consistent reporting and logging. */
-    public final VariableRecordType COMMENTPDU_TIME     = VariableRecordType.TIME;
+    public final static VariableRecordType COMMENTPDU_TIME     = VariableRecordType.TIME;
     
     /** CommentPdu type documenting current waypoint number, used for consistent reporting and logging. */
-    public final VariableRecordType COMMENTPDU_CURRENT_WAYPOINT_NUMBER = VariableRecordType.CURRENT_WAYPOINT_NUMBER;
+    public final static VariableRecordType COMMENTPDU_CURRENT_WAYPOINT_NUMBER = VariableRecordType.CURRENT_WAYPOINT_NUMBER;
     
     // TODO additional pecial Simkit COMMENTPDU types
     
@@ -252,7 +253,7 @@ public class DisChannel
     }
 
     /** 
-     * Send a single Protocol Data Unit (PDU) of any type
+     * Send a single Protocol Data Unit (PDU) of any type, using timestamp value already provided in PDU
      * @param pdu the pdu to send
      */
     public void sendSinglePdu(Pdu pdu)
@@ -271,26 +272,14 @@ public class DisChannel
         }
     }
 
-    /** 
-     * Send a single Protocol Data Unit (PDU) of any type, after setting the PDU with given timestamp in milliseconds
-     * @param disTimeStamp timestamp for this PDU, milliseconds since epoch
-     * @param pdu the pdu to send
-     */
-    public void sendSinglePdu(int disTimeStamp, Pdu pdu)
-    {
-        pdu.setTimestamp(disTimeStamp);
-        sendSinglePdu(pdu);
-    }
-
     /** 
      * Send a single Protocol Data Unit (PDU) of any type, after setting the PDU with given timestamp in seconds
-     * @param timeSeconds timestamp for this PDU, seconds since epoch
+     * @param timestampSeconds timestamp to set for this PDU, seconds since epoch
      * @param pdu the pdu to send
      */
-    public void sendSinglePdu(double timeSeconds, Pdu pdu)
+    public void sendSinglePdu(double timestampSeconds, Pdu pdu)
     {
-        int timeMilliseconds = (int)(timeSeconds * 1000.0);
-        pdu.setTimestamp(timeMilliseconds);
+        pdu.setTimestampSeconds(timestampSeconds);
         sendSinglePdu(pdu);
     }
     /** 
@@ -312,31 +301,20 @@ public class DisChannel
             }
         }, delayTimeMilliseconds);
     }
-
-    /** 
-     * Send a single Protocol Data Unit (PDU) of any type following a real-time delay
-     * @param pdu the pdu to send
-     * @param delayTimeSeconds delay before sending
-     */
-    public void sendSinglePduDelayed(Pdu pdu, double delayTimeSeconds)
-    {
-        long delayTimemilliseconds = (long)(delayTimeSeconds * 1000);
-        sendSinglePduDelayed(pdu, delayTimemilliseconds);
-    }
     
     /**
-     * Send Comment PDU using given DIS timestamp
-     * @param disTimeStamp   timestamp for this PDU, milliseconds since epoch
-     * @param commentType    enumeration value describing purpose of the narrative comment
-     * @param comments       String array of narrative comments
+     * Send Comment PDU using given DIS time in seconds, after setting the PDU with given timestamp in seconds
+     * @param timestampSeconds timestamp to set for this PDU, seconds since epoch
+     * @param commentType      enumeration value describing purpose of the narrative comment
+     * @param comments         String array of narrative comments
      * @return constructed CommentPdu if sent, null otherwise
      * @see VariableRecordType for other potential CommentPdu type enumerations.
      * @see <a href="https://docs.oracle.com/javase/tutorial/java/javaOO/arguments.html">Passing Information to a Method or a Constructor</a> Arbitrary Number of Arguments
      */
-    public CommentPdu sendCommentPdu(int disTimeStamp,
-                               VariableRecordType commentType,
-                                     // vararg... variable-length set of String comments can optionally follow
-                                        String... comments)
+    public CommentPdu sendCommentPdu(double timestampSeconds,
+                         VariableRecordType commentType,
+                               // vararg... variable-length set of String comments can optionally follow
+                                  String... comments)
     {
         if ((comments != null) && (comments.length > 0))
         {
@@ -362,7 +340,7 @@ public class DisChannel
                 // now build the commentPdu from these string inputs, thus constructing a narrative entry
                 @SuppressWarnings("CollectionsToArray")
                 CommentPdu commentPdu = getPduFactory().makeCommentPdu(commentType, newCommentsList.toArray(new String[0])); // comments);
-                commentPdu.setTimestamp(disTimeStamp);
+                commentPdu.setTimestampSeconds(timestampSeconds);
                 sendSinglePdu(commentPdu);
                 if (isVerboseComments()) // narrative report
                 {
@@ -375,26 +353,6 @@ public class DisChannel
         return null;
     }
     
-    /**
-     * Send Comment PDU using given DIS time in seconds
-     * @param timeSeconds    timestamp for this PDU, seconds since epoch
-     * @param commentType    enumeration value describing purpose of the narrative comment
-     * @param comments       String array of narrative comments
-     * @return constructed CommentPdu if sent, null otherwise
-     * @see VariableRecordType for other potential CommentPdu type enumerations.
-     * @see <a href="https://docs.oracle.com/javase/tutorial/java/javaOO/arguments.html">Passing Information to a Method or a Constructor</a> Arbitrary Number of Arguments
-     */
-    public CommentPdu sendCommentPdu(double timeSeconds,
-                               VariableRecordType commentType,
-                                     // vararg... variable-length set of String comments can optionally follow
-                                        String... comments)
-    {
-        int timeMilliseconds = (int)(timeSeconds * 1000.0);
-        return sendCommentPdu(timeMilliseconds,
-                              commentType,
-                              comments);
-    }
-    
     /**
      * Send Comment PDU using current DIS timestamp
      * @param commentType      enumeration value describing purpose of the narrative comment
@@ -435,25 +393,9 @@ public class DisChannel
             }
         }, delayTimeMilliseconds);
     }
-    /** 
-     * Send Comment PDU following time delay
-     * @param commentType    enumeration value describing purpose of the narrative comment
-     * @param delayTimeSeconds delay before sending
-     * @param comments       String array of narrative comments
-     * @see VariableRecordType for other potential CommentPdu type enumerations.
-     * @see <a href="https://docs.oracle.com/javase/tutorial/java/javaOO/arguments.html">Passing Information to a Method or a Constructor</a> Arbitrary Number of Arguments
-     */
-    public void sendCommentPduDelayed(VariableRecordType commentType,
-                                      double delayTimeSeconds,
-                                      // vararg... variable-length set of String comments can optionally follow
-                                      String... comments)
-    {
-        long delayTimemilliseconds = (long)(delayTimeSeconds * 1000);
-        sendCommentPduDelayed(commentType, delayTimemilliseconds, comments);
-    }
 
     /**
-     * test for verboseComments mode
+     * whether in verboseComments mode
      * @return whether verboseComments mode is enabled
      */
     public boolean isVerboseComments() {
@@ -572,6 +514,7 @@ public class DisChannel
     }
 
     /**
+     * Get whether DisNetworkInterface setting is verbose
      * @return the verboseDisNetworkInterface
      */
     public boolean isVerboseDisNetworkInterface() {
@@ -579,6 +522,7 @@ public class DisChannel
     }
 
     /**
+     * Set whether DisNetworkInterface setting is verbose
      * @param verboseDisNetworkInterface the verboseDisNetworkInterface to set
      */
     public void setVerboseDisNetworkInterface(boolean verboseDisNetworkInterface) {
@@ -588,6 +532,7 @@ public class DisChannel
     }
 
     /**
+     * Get whether PduRecorder setting is verbose
      * @return the verbosePduRecorder
      */
     public boolean isVerbosePduRecorder() {
@@ -595,6 +540,7 @@ public class DisChannel
     }
 
     /**
+     * Set whether PduRecorder setting is verbose
      * @param verbosePduRecorder the verbosePduRecorder to set
      */
     public void setVerbosePduRecorder(boolean verbosePduRecorder) {
-- 
GitLab