Skip to content
Snippets Groups Projects
Commit d63f4ade authored by Brutzman, Don's avatar Brutzman, Don
Browse files

improved narrative logging with Comment PDUs

parent e9e41638
No related branches found
No related tags found
No related merge requests found
......@@ -30,15 +30,12 @@ public class ExampleSimulationProgram
{
try
{
final double LOOP_DURATION_SECONDS = 1.0; // seconds
final int MAX_LOOP_COUNT = 10;
int loopCount = 0;
VariableRecordType narrativeType = VariableRecordType.OTHER; // of potential use
boolean simulationComplete = false; // sentinel variable as termination condition
// TODO reset clock to zero each time for consistent outputs.
// TODO reset clock to zero each time for consistent outputs
// your model setup: who's who in this zoo?
// create PDU objects and set their values
......@@ -52,10 +49,11 @@ public class ExampleSimulationProgram
FirePdu firePdu = pduFactory.makeFirePdu();
// should we customize this munition? what is it for your simulation?
// TODO simulation management PDUs
// loop the simulation while allowed, programmer can set additional conditions to break out and finish
while (loopCount < MAX_LOOP_COUNT)
{
String narrativeMessage1, narrativeMessage2, narrativeMessage3;
// initialize loop variables
loopCount++;
......@@ -91,21 +89,26 @@ public class ExampleSimulationProgram
// keep track of timestep: wait duration for elapsed time in this loop
// Thread.sleep needs a (long) parameter for milliseconds, which are clumsy to use sometimes
Thread.sleep((long)(LOOP_DURATION_SECONDS * 1000)); // seconds * (1000 msec/sec) = milliseconds
System.out.println ("... Pausing for " + LOOP_DURATION_SECONDS + " seconds");
System.out.println ("... [Pausing for " + LOOP_DURATION_SECONDS + " seconds]");
// send the status PDUs for this loop and continue
System.out.println ("sending PDUs for simulation step " + loopCount + ", monitor loopback to confirm sent");
sendAllPdus(entityStatePdu, firePdu, null, narrativeMessage1, narrativeMessage2, narrativeMessage3);
System.out.println ("... PDUs successfully sent");
sendAllPdus(entityStatePdu, firePdu, timeStepComment, narrativeMessage1, narrativeMessage2, narrativeMessage3);
System.out.println ("... [PDUs successfully sent for this loop]");
// ===============================
// loop now finished, thus terminate if simulation complete, otherwise send latest PDUs and continue
if (simulationComplete || (loopCount > 10000)) // for example; including fail-safe condition is good
{
System.out.println ("... Termination condition met, simulationComplete=" + simulationComplete);
System.out.println ("... [Termination condition met, simulationComplete=" + simulationComplete + "]"); // ", final loopCount=" + loopCount +
break;
}
} // end of while loop
// all done
narrativeMessage2 = "runSimulation() completed successfully";
sendCommentPdu(narrativeComment, narrativeMessage1, narrativeMessage2, narrativeMessage3);
System.out.println ("... [final CommentPdu successfully sent for simulation]");
// TODO simulation management PDUs
}
catch (InterruptedException iex) // handle any exception that your code might choose to provoke!
{
......@@ -113,7 +116,19 @@ public class ExampleSimulationProgram
}
}
/* **************************** infrastructure code, modification is seldom needed ************************* */
private boolean verboseComments = true;
String narrativeMessage1 = new String();
String narrativeMessage2 = new String();
String narrativeMessage3 = new String();
/* VariableRecordType enumerations have potential use with CommentPdu logs */
VariableRecordType descriptionComment = VariableRecordType.DESCRIPTION;
VariableRecordType narrativeComment = VariableRecordType.COMPLETE_EVENT_REPORT;
VariableRecordType statusComment = VariableRecordType.APPLICATION_STATUS;
VariableRecordType timeStepComment = VariableRecordType.APPLICATION_TIMESTEP;
VariableRecordType otherComment = VariableRecordType.OTHER;
/**
* Output prefix to identify this class, helps with logging
*/
......@@ -227,19 +242,32 @@ public class ExampleSimulationProgram
}
}
/**
* Send Comment PDU
* @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
* @param commentType enumeration value describing purpose of the narrative comment
* @param comments String array of narrative comments
*/
public void sendCommentPdu(VariableRecordType commentType,
// vararg... variable-length set of String comments can optionally follow
String... comments)
{
sendAllPdus (null, null, commentType, comments);
}
/**
* Send EntityState, Fire, Comment PDUs
* @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
* @param entityStatePdu the ESPDU to send, if any
* @param firePdu the FirePDU to send, if any
* @param commentType enumeration value describing the narrative comment
* @param commentType enumeration value describing purpose of the narrative comment
* @param comments String array of narrative comments
*/
public void sendAllPdus(EntityStatePdu entityStatePdu,
FirePdu firePdu,
VariableRecordType commentType,
// vararg... variable length string
String... comments)
FirePdu firePdu,
VariableRecordType commentType,
// vararg... variable-length set of String comments can optionally follow
String... comments)
{
if (entityStatePdu != null)
sendSinglePdu(entityStatePdu);
......@@ -258,9 +286,12 @@ public class ExampleSimulationProgram
if (!newCommentsList.isEmpty())
{
if (commentType == null)
commentType = VariableRecordType.OTHER;
commentType = otherComment; // fallback value otherComment
// now build the commentPdu from these string inputs
CommentPdu commentPdu = pduFactory.makeCommentPdu(commentType, newCommentsList.toArray(new String[0])); // comments);
sendSinglePdu(commentPdu);
if (isVerboseComments())
System.out.println("*** [Narrative comment sent: " + commentType.name() + "] " + newCommentsList.toString());
}
}
}
......@@ -300,4 +331,18 @@ public class ExampleSimulationProgram
System.out.println(TRACE_PREFIX + "complete."); // report successful completion
}
/**
* @return whether verboseComments mode is enabled
*/
public boolean isVerboseComments() {
return verboseComments;
}
/**
* @param newVerboseComments whether verboseComments mode is enabled
*/
public void setVerboseComments(boolean newVerboseComments) {
this.verboseComments = newVerboseComments;
}
}
......@@ -4,43 +4,54 @@ Deleting: C:\x-nps-gitlab\NetworkedGraphicsMV3500\examples\build\built-jar.prope
deps-jar:
Updating property file: C:\x-nps-gitlab\NetworkedGraphicsMV3500\examples\build\built-jar.properties
Compiling 1 source file to C:\x-nps-gitlab\NetworkedGraphicsMV3500\examples\build\classes
warning: [options] bootstrap class path not set in conjunction with -source 8
1 warning
compile-single:
run-single:
[OpenDis7Examples.ExampleSimulationProgram] started...
[edu.nps.moves.dis7.utilities.DisThreadedNetworkInterface] Using network interface Intel(R) Centrino(R) Ultimate-N 6300 AGN
[edu.nps.moves.dis7.utilities.DisThreadedNetworkInterface] Using network interface Intel(R) Centrino(R) Ultimate-N 6300 AGN
Network confirmation: address=239.1.2.3 port=3000
... Pausing for 1.0 seconds
... My simulation just did something, no really...
... [Pausing for 1.0 seconds]
sending PDUs for simulation step 1, monitor loopback to confirm sent
[edu.nps.moves.dis7.utilities.DisThreadedNetworkInterface] 1. received DisPduType 01 ENTITY_STATE size 144 bytes
[edu.nps.moves.dis7.utilities.DisThreadedNetworkInterface] 2. received DisPduType 02 FIRE size 96 bytes
[edu.nps.moves.dis7.utilities.DisThreadedNetworkInterface] 3. received DisPduType 22 COMMENT size 104 bytes
... PDUs successfully sent
... Pausing for 1.0 seconds
[edu.nps.moves.dis7.utilities.DisThreadedNetworkInterface] 1. received DisPduType 01 ENTITY_STATE, size 144 bytes)
[edu.nps.moves.dis7.utilities.DisThreadedNetworkInterface] 2. received DisPduType 02 FIRE, size 96 bytes)
[edu.nps.moves.dis7.utilities.DisThreadedNetworkInterface] 3. received DisPduType 22 COMMENT, size 104 bytes)
*** [Narrative comment sent: APPLICATION_TIMESTEP] [MV3500 ExampleSimulationProgram, runSimulation() loop 1]
... [PDUs successfully sent for this loop]
... My simulation just did something, no really...
... [Pausing for 1.0 seconds]
sending PDUs for simulation step 2, monitor loopback to confirm sent
[edu.nps.moves.dis7.utilities.DisThreadedNetworkInterface] 4. received DisPduType 01 ENTITY_STATE size 144 bytes
[edu.nps.moves.dis7.utilities.DisThreadedNetworkInterface] 5. received DisPduType 02 FIRE size 96 bytes
[edu.nps.moves.dis7.utilities.DisThreadedNetworkInterface] 6. received DisPduType 22 COMMENT size 104 bytes
... PDUs successfully sent
... Pausing for 1.0 seconds
[edu.nps.moves.dis7.utilities.DisThreadedNetworkInterface] 4. received DisPduType 01 ENTITY_STATE, size 144 bytes)
[edu.nps.moves.dis7.utilities.DisThreadedNetworkInterface] 5. received DisPduType 02 FIRE, size 96 bytes)
[edu.nps.moves.dis7.utilities.DisThreadedNetworkInterface] 6. received DisPduType 22 COMMENT, size 104 bytes)
*** [Narrative comment sent: APPLICATION_TIMESTEP] [MV3500 ExampleSimulationProgram, runSimulation() loop 2]
... [PDUs successfully sent for this loop]
... My simulation just did something, no really...
... [Pausing for 1.0 seconds]
sending PDUs for simulation step 3, monitor loopback to confirm sent
[edu.nps.moves.dis7.utilities.DisThreadedNetworkInterface] 7. received DisPduType 01 ENTITY_STATE size 144 bytes
[edu.nps.moves.dis7.utilities.DisThreadedNetworkInterface] 8. received DisPduType 02 FIRE size 96 bytes
[edu.nps.moves.dis7.utilities.DisThreadedNetworkInterface] 9. received DisPduType 22 COMMENT size 104 bytes
... PDUs successfully sent
... Pausing for 1.0 seconds
[edu.nps.moves.dis7.utilities.DisThreadedNetworkInterface] 7. received DisPduType 01 ENTITY_STATE, size 144 bytes)
[edu.nps.moves.dis7.utilities.DisThreadedNetworkInterface] 8. received DisPduType 02 FIRE, size 96 bytes)
[edu.nps.moves.dis7.utilities.DisThreadedNetworkInterface] 9. received DisPduType 22 COMMENT, size 104 bytes)
*** [Narrative comment sent: APPLICATION_TIMESTEP] [MV3500 ExampleSimulationProgram, runSimulation() loop 3]
... [PDUs successfully sent for this loop]
... My simulation just did something, no really...
... [Pausing for 1.0 seconds]
sending PDUs for simulation step 4, monitor loopback to confirm sent
[edu.nps.moves.dis7.utilities.DisThreadedNetworkInterface] 10. received DisPduType 01 ENTITY_STATE size 144 bytes
[edu.nps.moves.dis7.utilities.DisThreadedNetworkInterface] 11. received DisPduType 02 FIRE size 96 bytes
[edu.nps.moves.dis7.utilities.DisThreadedNetworkInterface] 12. received DisPduType 22 COMMENT size 104 bytes
... PDUs successfully sent
... Pausing for 1.0 seconds
[edu.nps.moves.dis7.utilities.DisThreadedNetworkInterface] 10. received DisPduType 01 ENTITY_STATE, size 144 bytes)
[edu.nps.moves.dis7.utilities.DisThreadedNetworkInterface] 11. received DisPduType 02 FIRE, size 96 bytes)
[edu.nps.moves.dis7.utilities.DisThreadedNetworkInterface] 12. received DisPduType 22 COMMENT, size 104 bytes)
*** [Narrative comment sent: APPLICATION_TIMESTEP] [MV3500 ExampleSimulationProgram, runSimulation() loop 4]
... [PDUs successfully sent for this loop]
... My simulation just did something, no really...
... [Pausing for 1.0 seconds]
sending PDUs for simulation step 5, monitor loopback to confirm sent
[edu.nps.moves.dis7.utilities.DisThreadedNetworkInterface] 13. received DisPduType 01 ENTITY_STATE size 144 bytes
[edu.nps.moves.dis7.utilities.DisThreadedNetworkInterface] 14. received DisPduType 02 FIRE size 96 bytes
[edu.nps.moves.dis7.utilities.DisThreadedNetworkInterface] 15. received DisPduType 22 COMMENT size 104 bytes
... PDUs successfully sent
... Termination condition met, simulationComplete=true
[edu.nps.moves.dis7.utilities.DisThreadedNetworkInterface] 13. received DisPduType 01 ENTITY_STATE, size 144 bytes)
[edu.nps.moves.dis7.utilities.DisThreadedNetworkInterface] 14. received DisPduType 02 FIRE, size 96 bytes)
[edu.nps.moves.dis7.utilities.DisThreadedNetworkInterface] 15. received DisPduType 22 COMMENT, size 104 bytes)
*** [Narrative comment sent: APPLICATION_TIMESTEP] [MV3500 ExampleSimulationProgram, runSimulation() loop 5]
... [PDUs successfully sent for this loop]
... [Termination condition met, simulationComplete=true]
[edu.nps.moves.dis7.utilities.DisThreadedNetworkInterface] 16. received DisPduType 22 COMMENT, size 120 bytes)
*** [Narrative comment sent: COMPLETE_EVENT_REPORT] [MV3500 ExampleSimulationProgram, runSimulation() completed successfully]
... [final CommentPdu successfully sent for simulation]
[OpenDis7Examples.ExampleSimulationProgram] complete.
BUILD SUCCESSFUL (total time: 10 seconds)
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment