diff --git a/assignments/src/MV3500Cohort2023MarchJune/homework3/Chojnacki/ExampleSimulationProgram.java b/assignments/src/MV3500Cohort2023MarchJune/homework3/Chojnacki/ExampleSimulationProgram.java index 5de984e28e10b7fa3c6c5071a14563c54ddf4c44..8b3bd05a31393d3281e2d1a682bf1fc6d7af64f4 100644 --- a/assignments/src/MV3500Cohort2023MarchJune/homework3/Chojnacki/ExampleSimulationProgram.java +++ b/assignments/src/MV3500Cohort2023MarchJune/homework3/Chojnacki/ExampleSimulationProgram.java @@ -1,11 +1,14 @@ /** * Copyright (c) 2008-2021, MOVES Institute, Naval Postgraduate School (NPS). All rights reserved. * This work is provided under a BSD open-source license, see project license.html and license.txt - * - * This Program is a modified version of ExampleSimulationProgram in order to see the + * + * This Program is a modified version of ExampleSimulationProgram in order to see the * verbose plain text pdu log. This simulates a firewall identifying a malicious packet * and tracing its source before destroying it. * + * and tracing its source before destroying it - updated September 12, 2021 to ensure + * correct file pushed to Gitlab. + * * @author Bruce Chojnacki */ package MV3500Cohort2023MarchJune.homework3.Chojnacki; @@ -19,19 +22,21 @@ import java.util.ArrayList; import java.util.logging.Level; import java.util.logging.Logger; -/** The purpose of this program is to provide an easily modifiable example simulation program - * that includes DIS-capable entities doing tasks and reporting them to the network. - * Default settings include PDU recording turned on by default. +/** + * The purpose of this program is to provide an easily modifiable example + * simulation program that includes DIS-capable entities doing tasks and + * reporting them to the network. Default settings include PDU recording turned + * on by default. */ -public class ExampleSimulationProgram -{ - private boolean verboseComments = true; - static final String NETWORK_ADDRESS_DEFAULT = "239.1.2.3"; - static final int NETWORK_PORT_DEFAULT = 3000; - static String networkAddress = NETWORK_ADDRESS_DEFAULT; - static int networkPort = NETWORK_PORT_DEFAULT; - String DEFAULT_OUTPUT_DIRECTORY = "./pduLog"; - +public class ExampleSimulationProgram { + + private boolean verboseComments = true; + static final String NETWORK_ADDRESS_DEFAULT = "239.1.2.3"; + static final int NETWORK_PORT_DEFAULT = 3000; + static String networkAddress = NETWORK_ADDRESS_DEFAULT; + static int networkPort = NETWORK_PORT_DEFAULT; + String DEFAULT_OUTPUT_DIRECTORY = "./pduLog"; + private EntityID createFriendFireWall() { EntityID FNFireWallID = new EntityID(); // 1.1.225.1.1.1 Platform,Cyber,USA,FireWall FNFireWallID.setSiteID(13); @@ -39,7 +44,7 @@ public class ExampleSimulationProgram FNFireWallID.setEntityID(103); return FNFireWallID; } - + private EntityType createFriendFireWallType() { EntityType FNFireWallType = new EntityType(); FNFireWallType.setEntityKind(EntityKind.PLATFORM); @@ -50,15 +55,15 @@ public class ExampleSimulationProgram FNFireWallType.setSpecific(1); return FNFireWallType; } - - private EntityID createMalPacket() { + + private EntityID createMalPacket() { EntityID MalPacketID = new EntityID(); // 1.1.45.1.7.1 Platform,Cyber,China,MaliciousPacket MalPacketID.setSiteID(66); MalPacketID.setApplicationID(666); MalPacketID.setEntityID(6666); return MalPacketID; } - + private EntityType createMalPacketType() { EntityType MalPacketType = new EntityType(); MalPacketType.setEntityKind(EntityKind.PLATFORM); @@ -69,7 +74,7 @@ public class ExampleSimulationProgram MalPacketType.setSpecific(1); return MalPacketType; } - + private MunitionDescriptor createTraceroute() { EntityType TracerouteType = new EntityType(); //2.2.225.2.13.1 @@ -86,319 +91,307 @@ public class ExampleSimulationProgram Traceroute.setRate(200); return Traceroute; } - + /** - * This runSimulationLoops() method is for you, a - * programmer-modifiable method for defining and running a new simulation of interest. - * Welcome! Other parts of this program handle bookkeeping and plumbing tasks so that - * you can focus on your model entities and activities. - * Expandable support includes DIS EntityStatePdu, FirePdu and CommentPdu all available for - * modification and sending in a simulation loop. - * Continuous improvement efforts seek to make this program as easy and straightforward - * as possible for DIS simulationists to use and adapt. - * All of the other methods are setup, teardown and configuration that you may find - * interesting, even helpful, but don't really have to worry about. + * This runSimulationLoops() method is for you, a programmer-modifiable + * method for defining and running a new simulation of interest. Welcome! + * Other parts of this program handle bookkeeping and plumbing tasks so that + * you can focus on your model entities and activities. Expandable support + * includes DIS EntityStatePdu, FirePdu and CommentPdu all available for + * modification and sending in a simulation loop. Continuous improvement + * efforts seek to make this program as easy and straightforward as possible + * for DIS simulationists to use and adapt. All of the other methods are + * setup, teardown and configuration that you may find interesting, even + * helpful, but don't really have to worry about. */ @SuppressWarnings("SleepWhileInLoop") // yes we do that - public void runSimulationLoops () - { - try - { - /** seconds for real-time execution (not simulation time, which may or may not be the same) */ - final double SIMULATION_LOOP_DURATION_SECONDS = 1.0; - final int SIMULATION_MAX_LOOP_COUNT = 15; // be deliberate out out there! also avoid infinite loops. - int simulationLoopCount = 0; // variable, initialized at 0 - boolean simulationComplete = false; // sentinel variable as termination condition,, are we done yet? - boolean fireBool = false; - boolean destBool = false; - - // TODO reset clock to zero each time for consistent outputs - - // Your model setup: define participants. who's who in this zoo? - // Assuming you keep track of entity objects... here is some support for for Entity 1. - - // create PDU object for US Firewall and set its values. - //EntityID entityID_1 = new EntityID(); - //entityID_1.setSiteID(1).setApplicationID(2).setEntityID(3); // made-up example ID; - - EntityStatePdu entityStatePdu_1 = pduFactory.makeEntityStatePdu(); - entityStatePdu_1.setEntityID(createFriendFireWall()); - entityStatePdu_1.setEntityType(createFriendFireWallType()); - entityStatePdu_1.getEntityLocation().setX(0); - entityStatePdu_1.setForceId(ForceID.FRIENDLY); - - // TODO someday, use enumerations; is there a unique site triplet for MOVES Institute? - // create PDU object for Malware Packet and set its values. - //EntityID entityID_2 = new EntityID(); - //entityID_2.setSiteID(4).setApplicationID(5).setEntityID(6); - - EntityStatePdu entityStatePdu_2 = pduFactory.makeEntityStatePdu(); - entityStatePdu_2.setEntityID(createMalPacket()); - entityStatePdu_2.setEntityType(createMalPacketType()); - entityStatePdu_2.getEntityLocation().setX(7); - entityStatePdu_2.setForceId(ForceID.OPPOSING); - - int MalPacketPingsReceived = 0; - - FirePdu firePdu = pduFactory.makeFirePdu(); // for entity 1 first weapon (possible traceroute) - // should we customize this munition? what is it for your simulation? - EntityID fireID = new EntityID(); - fireID.setSiteID(13); - fireID.setApplicationID(43); - fireID.setEntityID(103); - EntityID targetID = new EntityID(); - targetID.setSiteID(66); - targetID.setApplicationID(666); - targetID.setEntityID(6666); - - firePdu.setFiringEntityID(fireID); - firePdu.setTargetEntityID(targetID); - - firePdu.setDescriptor(createTraceroute()); // calling create Traceroute Method - - EntityID TracerouteID = new EntityID(); - TracerouteID.setEntityID(1); - firePdu.setMunitionExpendibleID(TracerouteID); - - CommentReliablePdu MalPacketDestroyedComment = pduFactory.makeCommentReliablePdu("Malware Packet DESTROYED BY Firewall"); - CommentReliablePdu MalPacketDetectedComment = pduFactory.makeCommentReliablePdu("Firewall Detects Malware engage Traceroute"); - - // TODO simulation management PDUs for startup, planning to design special class support - - //DetonationPdu detonationPdu = pduFactory.makeDetonationPdu(); - //detonationPdu.setDescriptor(pDescriptor); - - - // loop the simulation while allowed, programmer can set additional conditions to break out and finish - while (simulationLoopCount < SIMULATION_MAX_LOOP_COUNT) // are we done yet? - { - simulationLoopCount++; // good practice: increment loop counter as first action in that loop - - // ============================================================================================= - // * your own simulation code starts here! * - // ============================================================================================= - - // are there any other variables to modify at the beginning of your loop? - - // compute a track, update an ESPDU, whatever it is that your model is doing... - - // Where is my entity? Insert changes in position; this sample only changes X position. - entityStatePdu_1.getEntityLocation().setX(entityStatePdu_1.getEntityLocation().getX()); // stationary defensive posture - entityStatePdu_2.getEntityLocation().setX(entityStatePdu_2.getEntityLocation().getX() - 1.0); // 1m per timestep - - // decide whether to fire, and then update the firePdu. Hmmm, you might want a target to shoot at! - Double range = entityStatePdu_2.getEntityLocation().getX(); - System.out.println("range: " + range + " hops from our Network DMZ!"); - - if (range < 5) { // Range 5 - if (!fireBool) { - sendSinglePdu(MalPacketDetectedComment); - } - fireBool = true; - System.out.println("Entity#" + firePdu.getFiringEntityID().getEntityID() + " is firing " + firePdu.getDescriptor().getMunitionType().getDomain() + "." + firePdu.getDescriptor().getMunitionType().getCountry() + "." + firePdu.getDescriptor().getMunitionType().getCategory() + "." + firePdu.getDescriptor().getMunitionType().getSubCategory() + "." + firePdu.getDescriptor().getMunitionType().getSpecific() + "." + " at Entity#" + firePdu.getTargetEntityID().getEntityID()); + public void runSimulationLoops() { + try { + /** + * seconds for real-time execution (not simulation time, which may + * or may not be the same) + */ + final double SIMULATION_LOOP_DURATION_SECONDS = 1.0; + final int SIMULATION_MAX_LOOP_COUNT = 15; // be deliberate out out there! also avoid infinite loops. + int simulationLoopCount = 0; // variable, initialized at 0 + boolean simulationComplete = false; // sentinel variable as termination condition,, are we done yet? + boolean fireBool = false; + boolean destBool = false; + + // TODO reset clock to zero each time for consistent outputs + // Your model setup: define participants. who's who in this zoo? + // Assuming you keep track of entity objects... here is some support for for Entity 1. + // create PDU object for US Firewall and set its values. + //EntityID entityID_1 = new EntityID(); + //entityID_1.setSiteID(1).setApplicationID(2).setEntityID(3); // made-up example ID; + EntityStatePdu entityStatePdu_1 = pduFactory.makeEntityStatePdu(); + entityStatePdu_1.setEntityID(createFriendFireWall()); + entityStatePdu_1.setEntityType(createFriendFireWallType()); + entityStatePdu_1.getEntityLocation().setX(0); + entityStatePdu_1.setForceId(ForceID.FRIENDLY); + + // TODO someday, use enumerations; is there a unique site triplet for MOVES Institute? + // create PDU object for Malware Packet and set its values. + //EntityID entityID_2 = new EntityID(); + //entityID_2.setSiteID(4).setApplicationID(5).setEntityID(6); + EntityStatePdu entityStatePdu_2 = pduFactory.makeEntityStatePdu(); + entityStatePdu_2.setEntityID(createMalPacket()); + entityStatePdu_2.setEntityType(createMalPacketType()); + entityStatePdu_2.getEntityLocation().setX(7); + entityStatePdu_2.setForceId(ForceID.OPPOSING); + + int MalPacketPingsReceived = 0; + + FirePdu firePdu = pduFactory.makeFirePdu(); // for entity 1 first weapon (possible traceroute) + // should we customize this munition? what is it for your simulation? + EntityID fireID = new EntityID(); + fireID.setSiteID(13); + fireID.setApplicationID(43); + fireID.setEntityID(103); + EntityID targetID = new EntityID(); + targetID.setSiteID(66); + targetID.setApplicationID(666); + targetID.setEntityID(6666); + + firePdu.setFiringEntityID(fireID); + firePdu.setTargetEntityID(targetID); + + firePdu.setDescriptor(createTraceroute()); // calling create Traceroute Method + + EntityID TracerouteID = new EntityID(); + TracerouteID.setEntityID(1); + firePdu.setMunitionExpendibleID(TracerouteID); + + CommentReliablePdu MalPacketDestroyedComment = pduFactory.makeCommentReliablePdu("Malware Packet DESTROYED BY Firewall"); + CommentReliablePdu MalPacketDetectedComment = pduFactory.makeCommentReliablePdu("Firewall Detects Malware engage Traceroute"); + + // TODO simulation management PDUs for startup, planning to design special class support + //DetonationPdu detonationPdu = pduFactory.makeDetonationPdu(); + //detonationPdu.setDescriptor(pDescriptor); + // loop the simulation while allowed, programmer can set additional conditions to break out and finish + while (simulationLoopCount < SIMULATION_MAX_LOOP_COUNT) // are we done yet? + { + simulationLoopCount++; // good practice: increment loop counter as first action in that loop + + // ============================================================================================= + // * your own simulation code starts here! * + // ============================================================================================= + // are there any other variables to modify at the beginning of your loop? + // compute a track, update an ESPDU, whatever it is that your model is doing... + // Where is my entity? Insert changes in position; this sample only changes X position. + entityStatePdu_1.getEntityLocation().setX(entityStatePdu_1.getEntityLocation().getX()); // stationary defensive posture + entityStatePdu_2.getEntityLocation().setX(entityStatePdu_2.getEntityLocation().getX() - 1.0); // 1m per timestep + + // decide whether to fire, and then update the firePdu. Hmmm, you might want a target to shoot at! + Double range = entityStatePdu_2.getEntityLocation().getX(); + System.out.println("range: " + range + " hops from our Network DMZ!"); + + if (range < 5) { // Range 5 + if (!fireBool) { + sendSinglePdu(MalPacketDetectedComment); + } + fireBool = true; + System.out.println("Entity#" + firePdu.getFiringEntityID().getEntityID() + " is firing " + firePdu.getDescriptor().getMunitionType().getDomain() + "." + firePdu.getDescriptor().getMunitionType().getCountry() + "." + firePdu.getDescriptor().getMunitionType().getCategory() + "." + firePdu.getDescriptor().getMunitionType().getSubCategory() + "." + firePdu.getDescriptor().getMunitionType().getSpecific() + "." + " at Entity#" + firePdu.getTargetEntityID().getEntityID()); - if (firePdu.getTargetEntityID().getEntityID() == 6666) { - MalPacketPingsReceived += 1; - if (MalPacketPingsReceived > 1) { - // The Firewall destroys the MalPacket + if (firePdu.getTargetEntityID().getEntityID() == 6666) { + MalPacketPingsReceived += 1; + if (MalPacketPingsReceived > 1) { + // The Firewall destroys the MalPacket - System.out.println("Malware Packet DESTROYED BY Firewall after " + MalPacketPingsReceived + "pings from the traceroute."); - narrativeMessage4 = "Destroyed MalPacket"; - destBool = true; - simulationComplete = true; + System.out.println("Malware Packet DESTROYED BY Firewall after " + MalPacketPingsReceived + "pings from the traceroute."); + narrativeMessage4 = "Destroyed MalPacket"; + destBool = true; + simulationComplete = true; + } } } - } - // etc. etc. your code goes here for your simulation of interest - - // something happens between my simulation entities, la de da de da... - System.out.println ("Phase complete. Next phase initiating..."); - - - // make your reports: narrative code for CommentPdu here (set all to empty strings to avoid sending) - narrativeMessage1 = "MV3500 Homework 3 - Simulation Program"; - narrativeMessage2 = "runSimulation() loop " + simulationLoopCount; - narrativeMessage3 = "Simulation Started!"; // intentionally blank for testing - - // your loop termination condition goes here - if (simulationLoopCount > 5) // for example - { - simulationComplete = true; - } - // ============================================================================================= - // * your own simulation code is finished here! * - // ============================================================================================= - - // staying synchronized with 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)(SIMULATION_LOOP_DURATION_SECONDS * 1000)); // seconds * (1000 msec/sec) = milliseconds - System.out.println ("... [Pausing for " + SIMULATION_LOOP_DURATION_SECONDS + " seconds]"); - - // OK now send the status PDUs for this loop, and then continue - System.out.println ("sending PDUs for simulation step " + simulationLoopCount + ", monitor loopback to confirm sent"); - sendAllPdusForLoopTimestep(entityStatePdu_1, firePdu, timeStepComment, narrativeMessage1, narrativeMessage2, narrativeMessage3); - sendSinglePdu(entityStatePdu_2); // me too i.e. 2! - System.out.println ("... [PDUs successfully sent for this loop]"); - - // =============================== - // loop now finished, check whether to terminate if simulation complete, otherwise continue - if (simulationComplete || (simulationLoopCount > 10000)) // for example; including fail-safe condition is good - { - //sendSinglePdu(detonationPdu); - System.out.println ("... [Termination condition met, simulationComplete=" + simulationComplete + "]"); // ", final loopCount=" + loopCount + - break; - } - } // end of simulation loop - - narrativeMessage2 = "runSimulation() completed successfully"; // all done - 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! - { - Logger.getLogger(ExampleSimulationProgram.class.getName()).log(Level.SEVERE, null, iex); - } + // etc. etc. your code goes here for your simulation of interest + + // something happens between my simulation entities, la de da de da... + System.out.println("Phase complete. Next phase initiating..."); + + // make your reports: narrative code for CommentPdu here (set all to empty strings to avoid sending) + narrativeMessage1 = "MV3500 Homework 3 - Simulation Program"; + narrativeMessage2 = "runSimulation() loop " + simulationLoopCount; + narrativeMessage3 = "Simulation Started!"; // intentionally blank for testing + + // your loop termination condition goes here + if (simulationLoopCount > 5) // for example + { + simulationComplete = true; + } + // ============================================================================================= + // * your own simulation code is finished here! * + // ============================================================================================= + + // staying synchronized with 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) (SIMULATION_LOOP_DURATION_SECONDS * 1000)); // seconds * (1000 msec/sec) = milliseconds + System.out.println("... [Pausing for " + SIMULATION_LOOP_DURATION_SECONDS + " seconds]"); + + // OK now send the status PDUs for this loop, and then continue + System.out.println("sending PDUs for simulation step " + simulationLoopCount + ", monitor loopback to confirm sent"); + sendAllPdusForLoopTimestep(entityStatePdu_1, firePdu, timeStepComment, narrativeMessage1, narrativeMessage2, narrativeMessage3); + sendSinglePdu(entityStatePdu_2); // me too i.e. 2! + System.out.println("... [PDUs successfully sent for this loop]"); + + // =============================== + // loop now finished, check whether to terminate if simulation complete, otherwise continue + if (simulationComplete || (simulationLoopCount > 10000)) // for example; including fail-safe condition is good + { + //sendSinglePdu(detonationPdu); + System.out.println("... [Termination condition met, simulationComplete=" + simulationComplete + "]"); // ", final loopCount=" + loopCount + + break; + } + } // end of simulation loop + + narrativeMessage2 = "runSimulation() completed successfully"; // all done + 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! + { + Logger.getLogger(ExampleSimulationProgram.class.getName()).log(Level.SEVERE, null, iex); + } } /* **************************** infrastructure code, modification is seldom needed ************************* */ - + String narrativeMessage1 = new String(); String narrativeMessage2 = new String(); String narrativeMessage3 = new String(); String narrativeMessage4 = new String(); - + /* VariableRecordType enumerations have potential use with CommentPdu logs */ - /* TODO contrast to EntityType */ + /* TODO contrast to EntityType */ 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 - */ + 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 + */ private final static String TRACE_PREFIX = "[" + ExampleSimulationProgram.class.getName() + "] "; - + // class variables - PduFactory pduFactory = new PduFactory(); - DisThreadedNetworkInterface disNetworkInterface; + PduFactory pduFactory = new PduFactory(); + DisThreadedNetworkInterface disNetworkInterface; DisThreadedNetworkInterface.PduListener pduListener; - Pdu receivedPdu; - PduRecorder pduRecorder; - + Pdu receivedPdu; + PduRecorder pduRecorder; + /** - * Constructor design goal: additional built-in initialization conveniences can go here - * to keep student efforts focused on the runSimulation() method. + * Constructor design goal: additional built-in initialization conveniences + * can go here to keep student efforts focused on the runSimulation() + * method. */ - public ExampleSimulationProgram() - { + public ExampleSimulationProgram() { // Constructor is under consideration. Constructor is not currently needed. } - + /** - * Utility Constructor that allows your example simulation program to override default network address and port + * Utility Constructor that allows your example simulation program to + * override default network address and port + * * @param address network address to use * @param port corresponding network port to use */ - public ExampleSimulationProgram(String address, int port) - { + public ExampleSimulationProgram(String address, int port) { setNetworkAddress(address); - + setNetworkPort(port); } /** * get networkAddress + * * @return the networkAddress */ - public String getNetworkAddress() - { + public String getNetworkAddress() { return networkAddress; } /** * set networkAddress + * * @param newNetworkAddress the networkAddress to set */ - public final void setNetworkAddress(String newNetworkAddress) - { + public final void setNetworkAddress(String newNetworkAddress) { ExampleSimulationProgram.networkAddress = newNetworkAddress; } /** * get networkPort + * * @return the networkPort */ - public int getNetworkPort() - { + public int getNetworkPort() { return networkPort; } /** * set networkPort + * * @param newNetworkPort the networkPort to set */ - public final void setNetworkPort(int newNetworkPort) - { + public final void setNetworkPort(int newNetworkPort) { ExampleSimulationProgram.networkPort = newNetworkPort; } /** * Initialize network interface, choosing best available network interface */ - public void setUpNetworkInterface() - { + public void setUpNetworkInterface() { disNetworkInterface = new DisThreadedNetworkInterface(getNetworkAddress(), getNetworkPort()); - disNetworkInterface.setDescriptor ("ExampleSimulationProgramAllen_3 pdu looping"); - - System.out.println("Network confirmation:" + - " address=" + disNetworkInterface.getAddress()+ // disNetworkInterface.getMulticastGroup() + - " port=" + disNetworkInterface.getPort()); // + disNetworkInterface.getDisPort()); - pduListener = new DisThreadedNetworkInterface.PduListener() - { - /** Callback handler for listener */ + disNetworkInterface.setDescriptor("ExampleSimulationProgramAllen_3 pdu looping"); + + System.out.println("Network confirmation:" + + " address=" + disNetworkInterface.getAddress() + + // disNetworkInterface.getMulticastGroup() + + " port=" + disNetworkInterface.getPort()); // + disNetworkInterface.getDisPort()); + pduListener = new DisThreadedNetworkInterface.PduListener() { + /** + * Callback handler for listener + */ @Override - public void incomingPdu(Pdu newPdu) - { + public void incomingPdu(Pdu newPdu) { receivedPdu = newPdu; } }; disNetworkInterface.addListener(pduListener); - + String outputDirectory = DEFAULT_OUTPUT_DIRECTORY; System.out.println("Beginning pdu save to directory " + outputDirectory); pduRecorder = new PduRecorder(outputDirectory, getNetworkAddress(), getNetworkPort()); // assumes save - pduRecorder.setDescriptor ("ExampleSimulationProgramAllen_3 pduRecorder"); + pduRecorder.setDescriptor("ExampleSimulationProgramAllen_3 pduRecorder"); pduRecorder.start(); // begin running } - /** All done, release network resources */ - public void tearDownNetworkInterface() - { + /** + * All done, release network resources + */ + public void tearDownNetworkInterface() { pduRecorder.stop(); disNetworkInterface.removeListener(pduListener); - + disNetworkInterface.close(); // disNetworkInterface.kill(); // renamed as close(), deprecated // disNetworkInterface = null; // making sure no possibility of zombie process remaining... } - /** + /** * Send a single Protocol Data Unit (PDU) of any type + * * @param pdu the pdu to send */ - private void sendSinglePdu(Pdu pdu) - { - try - { + private void sendSinglePdu(Pdu pdu) { + try { disNetworkInterface.send(pdu); Thread.sleep(100); // TODO consider refactoring the wait logic and moving externally - } - catch (InterruptedException ex) - { + } catch (InterruptedException ex) { System.err.println(this.getClass().getName() + " Error sending PDU: " + ex.getLocalizedMessage()); System.exit(1); } @@ -406,82 +399,91 @@ 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 + * + * @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) - { - sendAllPdusForLoopTimestep (null, null, commentType, comments); + // vararg... variable-length set of String comments can optionally follow + String... comments) { + sendAllPdusForLoopTimestep(null, null, commentType, comments); } /** - * Send EntityState, Fire, Comment PDUs that got updated for this loop, reflecting state of current simulation timestep. - * @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 + * Send EntityState, Fire, Comment PDUs that got updated for this loop, + * reflecting state of current simulation timestep. + * + * @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 purpose of the narrative comment - * @param comments String array of narrative comments + * @param firePdu the FirePDU to send, if any + * @param commentType enumeration value describing purpose of the narrative + * comment + * @param comments String array of narrative comments */ public void sendAllPdusForLoopTimestep(EntityStatePdu entityStatePdu, - FirePdu firePdu, - VariableRecordType commentType, - // vararg... variable-length set of String comments can optionally follow - String... comments) - { - if (entityStatePdu != null) + FirePdu firePdu, + VariableRecordType commentType, + // vararg... variable-length set of String comments can optionally follow + String... comments) { + if (entityStatePdu != null) { sendSinglePdu(entityStatePdu); - - if (firePdu != null) + } + + if (firePdu != null) { sendSinglePdu(firePdu); // bang - - if ((comments != null) && (comments.length > 0)) - { + } + if ((comments != null) && (comments.length > 0)) { ArrayList<String> newCommentsList = new ArrayList<>(); - for (String comment : comments) - { - if (!comment.isEmpty()) - { + for (String comment : comments) { + if (!comment.isEmpty()) { newCommentsList.add(comment); // OK found something to send } } - if (!newCommentsList.isEmpty()) - { - if (commentType == null) + if (!newCommentsList.isEmpty()) { + if (commentType == null) { commentType = otherComment; // fallback value otherComment - // now build the commentPdu from these string inputs, thus constructing a narrative entry + } // now build the commentPdu from these string inputs, thus constructing a narrative entry CommentPdu commentPdu = pduFactory.makeCommentPdu(commentType, newCommentsList.toArray(new String[0])); // comments); sendSinglePdu(commentPdu); - if (isVerboseComments()) + if (isVerboseComments()) { System.out.println("*** [Narrative comment sent: " + commentType.name() + "] " + newCommentsList.toString()); + } } } } - + /** * Main method is first executed when a program instance is loaded. - * @see <a href="https://docs.oracle.com/javase/tutorial/getStarted/application/index.html">Java Tutorials: A Closer Look at the "Hello World!" Application</a> - * @param args command-line arguments are an array of optional String parameters that are passed from execution environment during invocation + * + * @see + * <a href="https://docs.oracle.com/javase/tutorial/getStarted/application/index.html">Java + * Tutorials: A Closer Look at the "Hello World!" Application</a> + * @param args command-line arguments are an array of optional String + * parameters that are passed from execution environment during invocation */ - public static void main(String[] args) - { + public static void main(String[] args) { System.out.println(TRACE_PREFIX + "started..."); - + ExampleSimulationProgram thisProgram = new ExampleSimulationProgram(); // creates instance - + // initial execution: can handle args array of initialization arguments here - if (args.length == 2) - { - if ((args[0] != null) && !args[0].isEmpty()) + if (args.length == 2) { + if ((args[0] != null) && !args[0].isEmpty()) { thisProgram.setNetworkAddress(args[0]); - - if ((args[1] != null) && !args[1].isEmpty()) + } + + if ((args[1] != null) && !args[1].isEmpty()) { thisProgram.setNetworkPort(Integer.parseInt(args[1])); - } - else if (args.length != 0) - { + } + } else if (args.length != 0) { System.err.println("Usage: " + thisProgram.getClass().getName() + " [address port]"); System.exit(-1); } @@ -489,15 +491,16 @@ public class ExampleSimulationProgram thisProgram.setUpNetworkInterface(); - thisProgram.runSimulationLoops (); // ... your simulation execution code goes in there ... - + thisProgram.runSimulationLoops(); // ... your simulation execution code goes in there ... + thisProgram.tearDownNetworkInterface(); // make sure no processes are left lingering - + System.out.println(TRACE_PREFIX + "complete."); // report successful completion } /** * get whether verbose comments are enabled + * * @return whether verboseComments mode is enabled */ public boolean isVerboseComments() { @@ -506,6 +509,7 @@ public class ExampleSimulationProgram /** * set whether verbose comments are enabled + * * @param newVerboseComments whether verboseComments mode is enabled */ public void setVerboseComments(boolean newVerboseComments) { diff --git a/assignments/src/MV3500Cohort2023MarchJune/homework3/Fredrickson/PduCaptureLogFredrickson.dislog b/assignments/src/MV3500Cohort2023MarchJune/homework3/Fredrickson/PduCaptureLogFredrickson.dislog new file mode 100644 index 0000000000000000000000000000000000000000..9ecd8e9263f3a7b12d638c215c304b58ae63cd92 --- /dev/null +++ b/assignments/src/MV3500Cohort2023MarchJune/homework3/Fredrickson/PduCaptureLogFredrickson.dislog @@ -0,0 +1,54 @@ +# Start, ENCODING_PLAINTEXT, [PduRecorder] 20230605_132110, DIS capture file, .\pduLog\PduCaptureLog4.dislog +# Timestamp(8 bytes),ProtocolVersion,CompatibilityVersion,ExerciseID,PduType,PduStatus,HeaderLength,PduLength,then PDU-specific data +# ============================================= +# DisPduType 11 CREATE_ENTITY, Session time 13:21:10.9, session duration 00:00:00.0, Pdu timestamp 1516340589 05:43:09.0, simulation stream interval 0 00:00:00.0 +0,0,43,-72,102,70,23,29,7,4,11,5,90,97,-123,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +# DisPduType 11 CREATE_ENTITY, Session time 13:21:11.0, session duration 00:00:00.0, Pdu timestamp 1516340589 05:43:09.0, simulation stream interval 0 00:00:00.0 +0,0,0,0,0,-95,108,56,7,4,11,5,90,97,-123,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +# DisPduType 22 COMMENT, Session time 13:21:11.0, session duration 00:00:00.0, Pdu timestamp 0 00:00:00.0, simulation stream interval -1516340589 18:16:51.0 +0,0,0,0,0,-86,-86,-96,7,1,22,5,0,0,0,0,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,-81,-46,0,0,1,64,83,105,109,117,108,97,116,105,111,110,32,116,105,109,101,115,116,101,112,32,100,117,114,97,116,105,111,110,32,49,46,48,32,115,101,99,111,110,100,115 +# DisPduType 22 COMMENT, Session time 13:21:11.0, session duration 00:00:00.1, Pdu timestamp 0 00:00:00.0, simulation stream interval -1516340589 18:16:51.0 +0,0,0,0,6,111,9,4,7,1,22,5,0,0,0,0,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,-53,32,0,0,2,16,83,105,109,117,108,97,116,105,111,110,32,116,105,109,101,32,48,46,48,32,97,116,32,76,111,99,97,108,68,97,116,101,84,105,109,101,32,50,48,50,51,45,48,54,45,48,53,84,49,51,58,50,49,58,49,49,46,48,57,53,57,48,53,50,48,48,0,0,0,0,0,0 +# DisPduType 01 ENTITY_STATE, Session time 13:21:12.2, session duration 00:00:01.2, Pdu timestamp 0 00:00:00.0, simulation stream interval -1516340589 18:16:51.0 +0,0,0,0,72,-31,-56,48,7,1,1,1,0,0,0,0,0,-112,40,0,0,1,0,2,0,3,1,0,1,2,0,-31,23,2,1,0,0,0,0,-31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,63,-16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32,69,110,116,105,116,121,32,35,53,51,0,0,0,0 +# DisPduType 02 FIRE, Session time 13:21:12.3, session duration 00:00:01.3, Pdu timestamp 0 00:00:00.0, simulation stream interval -1516340589 18:16:51.0 +0,0,0,0,79,5,-76,-80,7,1,2,2,0,0,0,0,0,96,40,0,0,2,0,3,0,0,0,2,0,3,0,0,0,2,0,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,0,0,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,0,0,0,0,0,0,0,0,0,0,68,122,0,0 +# DisPduType 22 COMMENT, Session time 13:21:12.4, session duration 00:00:01.4, Pdu timestamp 0 00:00:00.0, simulation stream interval -1516340589 18:16:51.0 +0,0,0,0,85,16,-79,52,7,1,22,5,0,0,0,0,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,3,-87,-72,0,0,0,-8,77,86,51,53,48,48,32,69,120,97,109,112,108,101,83,105,109,117,108,97,116,105,111,110,80,114,111,103,114,97,109,0,0,3,-87,-72,0,0,0,-80,114,117,110,83,105,109,117,108,97,116,105,111,110,40,41,32,108,111,111,112,32,49,0,0 +# DisPduType 01 ENTITY_STATE, Session time 13:21:12.5, session duration 00:00:01.5, Pdu timestamp 0 00:00:00.0, simulation stream interval -1516340589 18:16:51.0 +0,0,0,0,91,-46,77,-84,7,1,1,1,0,0,0,0,0,-112,40,0,0,1,0,2,0,4,2,0,1,3,0,-51,62,2,2,0,0,0,0,-31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32,32,69,110,116,105,116,121,32,35,50,0,0,0,0 +# DisPduType 01 ENTITY_STATE, Session time 13:21:13.6, session duration 00:00:02.6, Pdu timestamp 0 00:00:00.0, simulation stream interval -1516340589 18:16:51.0 +0,0,0,0,-98,-121,6,76,7,1,1,1,0,0,0,0,0,-112,40,0,0,1,0,2,0,3,1,0,1,2,0,-31,23,2,1,0,0,0,0,-31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32,69,110,116,105,116,121,32,35,53,51,0,0,0,0 +# DisPduType 02 FIRE, Session time 13:21:13.7, session duration 00:00:02.7, Pdu timestamp 0 00:00:00.0, simulation stream interval -1516340589 18:16:51.0 +0,0,0,0,-92,-102,39,48,7,1,2,2,0,0,0,0,0,96,40,0,0,2,0,3,0,0,0,2,0,3,0,0,0,2,0,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,0,0,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,0,0,0,0,0,0,0,0,0,0,68,122,0,0 +# DisPduType 22 COMMENT, Session time 13:21:13.8, session duration 00:00:02.8, Pdu timestamp 0 00:00:00.0, simulation stream interval -1516340589 18:16:51.0 +0,0,0,0,-86,-56,78,112,7,1,22,5,0,0,0,0,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,3,-87,-72,0,0,0,-8,77,86,51,53,48,48,32,69,120,97,109,112,108,101,83,105,109,117,108,97,116,105,111,110,80,114,111,103,114,97,109,0,0,3,-87,-72,0,0,0,-80,114,117,110,83,105,109,117,108,97,116,105,111,110,40,41,32,108,111,111,112,32,50,0,0 +# DisPduType 01 ENTITY_STATE, Session time 13:21:13.9, session duration 00:00:02.9, Pdu timestamp 0 00:00:00.0, simulation stream interval -1516340589 18:16:51.0 +0,0,0,0,-79,114,-87,-56,7,1,1,1,0,0,0,0,0,-112,40,0,0,1,0,2,0,4,2,0,1,3,0,-51,62,2,2,0,0,0,0,-31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32,32,69,110,116,105,116,121,32,35,50,0,0,0,0 +# DisPduType 01 ENTITY_STATE, Session time 13:21:15.0, session duration 00:00:04.0, Pdu timestamp 0 00:00:00.0, simulation stream interval -1516340589 18:16:51.0 +0,0,0,0,-12,93,58,100,7,1,1,1,0,0,0,0,0,-112,40,0,0,1,0,2,0,3,1,0,1,2,0,-31,23,2,1,0,0,0,0,-31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,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,0,0,0,0,0,0,0,0,0,0,0,32,69,110,116,105,116,121,32,35,53,51,0,0,0,0 +# DisPduType 02 FIRE, Session time 13:21:15.1, session duration 00:00:04.2, Pdu timestamp 0 00:00:00.0, simulation stream interval -1516340589 18:16:51.0 +0,0,0,0,-6,-24,-10,-84,7,1,2,2,0,0,0,0,0,96,40,0,0,2,0,3,0,0,0,2,0,3,0,0,0,2,0,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,0,0,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,0,0,0,0,0,0,0,0,0,0,68,122,0,0 +# DisPduType 22 COMMENT, Session time 13:21:15.3, session duration 00:00:04.3, Pdu timestamp 0 00:00:00.0, simulation stream interval -1516340589 18:16:51.0 +0,0,0,1,1,-105,-55,-60,7,1,22,5,0,0,0,0,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,3,-87,-72,0,0,0,-8,77,86,51,53,48,48,32,69,120,97,109,112,108,101,83,105,109,117,108,97,116,105,111,110,80,114,111,103,114,97,109,0,0,3,-87,-72,0,0,0,-80,114,117,110,83,105,109,117,108,97,116,105,111,110,40,41,32,108,111,111,112,32,51,0,0 +# DisPduType 01 ENTITY_STATE, Session time 13:21:15.4, session duration 00:00:04.4, Pdu timestamp 0 00:00:00.0, simulation stream interval -1516340589 18:16:51.0 +0,0,0,1,8,73,-44,-80,7,1,1,1,0,0,0,0,0,-112,40,0,0,1,0,2,0,4,2,0,1,3,0,-51,62,2,2,0,0,0,0,-31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32,32,69,110,116,105,116,121,32,35,50,0,0,0,0 +# DisPduType 01 ENTITY_STATE, Session time 13:21:16.5, session duration 00:00:05.5, Pdu timestamp 0 00:00:00.0, simulation stream interval -1516340589 18:16:51.0 +0,0,0,1,75,11,-112,44,7,1,1,1,0,0,0,0,0,-112,40,0,0,1,0,2,0,3,1,0,1,2,0,-31,23,2,1,0,0,0,0,-31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32,69,110,116,105,116,121,32,35,53,51,0,0,0,0 +# DisPduType 02 FIRE, Session time 13:21:16.6, session duration 00:00:05.6, Pdu timestamp 0 00:00:00.0, simulation stream interval -1516340589 18:16:51.0 +0,0,0,1,81,127,92,-72,7,1,2,2,0,0,0,0,0,96,40,0,0,2,0,3,0,0,0,2,0,3,0,0,0,2,0,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,0,0,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,0,0,0,0,0,0,0,0,0,0,68,122,0,0 +# DisPduType 22 COMMENT, Session time 13:21:16.7, session duration 00:00:05.7, Pdu timestamp 0 00:00:00.0, simulation stream interval -1516340589 18:16:51.0 +0,0,0,1,88,22,2,-64,7,1,22,5,0,0,0,0,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,3,-87,-72,0,0,0,-8,77,86,51,53,48,48,32,69,120,97,109,112,108,101,83,105,109,117,108,97,116,105,111,110,80,114,111,103,114,97,109,0,0,3,-87,-72,0,0,0,-80,114,117,110,83,105,109,117,108,97,116,105,111,110,40,41,32,108,111,111,112,32,52,0,0 +# DisPduType 01 ENTITY_STATE, Session time 13:21:16.8, session duration 00:00:05.8, Pdu timestamp 0 00:00:00.0, simulation stream interval -1516340589 18:16:51.0 +0,0,0,1,94,-98,-99,20,7,1,1,1,0,0,0,0,0,-112,40,0,0,1,0,2,0,4,2,0,1,3,0,-51,62,2,2,0,0,0,0,-31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32,32,69,110,116,105,116,121,32,35,50,0,0,0,0 +# DisPduType 01 ENTITY_STATE, Session time 13:21:17.9, session duration 00:00:06.9, Pdu timestamp 0 00:00:00.0, simulation stream interval -1516340589 18:16:51.0 +0,0,0,1,-96,-78,-80,-76,7,1,1,1,0,0,0,0,0,-112,40,0,0,1,0,2,0,3,1,0,1,2,0,-31,23,2,1,0,0,0,0,-31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32,69,110,116,105,116,121,32,35,53,51,0,0,0,0 +# DisPduType 02 FIRE, Session time 13:21:18.0, session duration 00:00:07.1, Pdu timestamp 0 00:00:00.0, simulation stream interval -1516340589 18:16:51.0 +0,0,0,1,-89,58,31,108,7,1,2,2,0,0,0,0,0,96,40,0,0,2,0,3,0,0,0,2,0,3,0,0,0,2,0,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,0,0,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,0,0,0,0,0,0,0,0,0,0,68,122,0,0 +# DisPduType 22 COMMENT, Session time 13:21:18.2, session duration 00:00:07.2, Pdu timestamp 0 00:00:00.0, simulation stream interval -1516340589 18:16:51.0 +0,0,0,1,-83,-30,23,112,7,1,22,5,0,0,0,0,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,3,-87,-72,0,0,0,-8,77,86,51,53,48,48,32,69,120,97,109,112,108,101,83,105,109,117,108,97,116,105,111,110,80,114,111,103,114,97,109,0,0,3,-87,-72,0,0,0,-80,114,117,110,83,105,109,117,108,97,116,105,111,110,40,41,32,108,111,111,112,32,53,0,0 +# DisPduType 01 ENTITY_STATE, Session time 13:21:18.3, session duration 00:00:07.3, Pdu timestamp 0 00:00:00.0, simulation stream interval -1516340589 18:16:51.0 +0,0,0,1,-76,-59,61,16,7,1,1,1,0,0,0,0,0,-112,40,0,0,1,0,2,0,4,2,0,1,3,0,-51,62,2,2,0,0,0,0,-31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32,32,69,110,116,105,116,121,32,35,50,0,0,0,0 +# DisPduType 22 COMMENT, Session time 13:21:18.4, session duration 00:00:07.4, Pdu timestamp 2556 00:42:36.0, simulation stream interval -1516338033 18:59:27.0 +0,0,0,1,-70,-62,-93,116,7,1,22,5,0,0,9,-4,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,9,90,-90,0,0,0,-8,77,86,51,53,48,48,32,69,120,97,109,112,108,101,83,105,109,117,108,97,116,105,111,110,80,114,111,103,114,97,109,0,0,9,90,-90,0,0,1,48,114,117,110,83,105,109,117,108,97,116,105,111,110,40,41,32,99,111,109,112,108,101,116,101,100,32,115,117,99,99,101,115,115,102,117,108,108,121,0,0 +# Finish, ENCODING_PLAINTEXT, [PduRecorder] 20230605_132120, DIS capture file, .\pduLog\PduCaptureLog4.dislog diff --git a/assignments/src/MV3500Cohort2023MarchJune/homework3/Fredrickson/README.md b/assignments/src/MV3500Cohort2023MarchJune/homework3/Fredrickson/README.md new file mode 100644 index 0000000000000000000000000000000000000000..4fb1b94685ed87fed1d0d3c13414db4e528d0421 --- /dev/null +++ b/assignments/src/MV3500Cohort2023MarchJune/homework3/Fredrickson/README.md @@ -0,0 +1,3 @@ +## Homework 3: Example Simulation Recording using OpenDIS Network Streams + +// (INSERT DIFFERENCES HERE) \ No newline at end of file diff --git a/assignments/src/MV3500Cohort2023MarchJune/homework3/Fredrickson/package-info.java b/assignments/src/MV3500Cohort2023MarchJune/homework3/Fredrickson/package-info.java index 2707e4a293289fe1c51eb7a3e608d605727c5a1f..7729ccd90f91ecb22dc986ca35c3d1f2e3d0463b 100644 --- a/assignments/src/MV3500Cohort2023MarchJune/homework3/Fredrickson/package-info.java +++ b/assignments/src/MV3500Cohort2023MarchJune/homework3/Fredrickson/package-info.java @@ -1,5 +1,5 @@ /** - * Final project assignments supporting the NPS MOVES MV3500 Networked Graphics course. + * Assignment 3 - Example Simulation Program. * * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments">networkedGraphicsMV3500 assignments</a> * @see java.lang.Package diff --git a/assignments/src/MV3500Cohort2023MarchJune/homework3/Hedgcorth/ArrivalProcess.java b/assignments/src/MV3500Cohort2023MarchJune/homework3/Hedgcorth/ArrivalProcess.java new file mode 100644 index 0000000000000000000000000000000000000000..e4b55ab972d226f7cea3bb909b5b1e2526757b6d --- /dev/null +++ b/assignments/src/MV3500Cohort2023MarchJune/homework3/Hedgcorth/ArrivalProcess.java @@ -0,0 +1,97 @@ +package MV3500Cohort2023MarchJune.homework3.Hedgcorth; + +import simkit.SimEntityBase; +import simkit.random.RandomVariate; + +/** + * The ArrivalProcess class represents an arrival process using the + * SimEntityBase from simkit. + * + * @author leahhedgcorth + */ +public class ArrivalProcess extends SimEntityBase { + + // parameter + private RandomVariate interarrivalTimeGenerator; + + // state variable + protected int numberArrivals; + + /** + * The constructor method ArrivalProcess(RandomVariate) sets the + * interarrivalTimeGenerator RandomVariate. + * + * @param interarrivalTimeGenerator + */ + public ArrivalProcess(RandomVariate interarrivalTimeGenerator) { + setInterarrivalTimeGenerator(interarrivalTimeGenerator); + } + + /** + * The constructor method ArrivalProcess() is currently left empty. + * + */ + public ArrivalProcess() { + } + + /** + * The method getInterarrivalTimeGenerator() returns the + * interarrivalTimeGenerator . + * + * @return + */ + public RandomVariate getInterarrivalTimeGenerator() { + return interarrivalTimeGenerator; + } + + /** + * The method setInterarrivalTimeGenerator sets the + * interarrivalTimeGenerator. + * + * @param interarrivalTimeGenerator + */ + public void setInterarrivalTimeGenerator(RandomVariate interarrivalTimeGenerator) { + this.interarrivalTimeGenerator = interarrivalTimeGenerator; + } + + /** + * The method getNumberArrivals returns the numberArrivals. + * + * @return + */ + public int getNumberArrivals() { + return numberArrivals; + } + + /** + * The method reset() sets all state variables to their initial values. + */ + @Override + public void reset() { + super.reset(); + numberArrivals = 0; + } + + /** + * The doRun() method first fires a PropertyChange and then schedules the + * first Arrival event. + */ + public void doRun() { + firePropertyChange("numberArrivals", getNumberArrivals()); + waitDelay("Arrival", interarrivalTimeGenerator); + } + + /** + * The doArrival() method saves the oldNumberArrivals and then passes the it to + * the firePropertyChange method to complete the state transition. It also + * increments numberArrivals by 1. + */ + public void doArrival() { + int oldNumberArrivals = getNumberArrivals(); + numberArrivals = numberArrivals + 1; + firePropertyChange("numberArrivals", oldNumberArrivals, + getNumberArrivals()); + waitDelay("Arrival", interarrivalTimeGenerator); + + } +} diff --git a/assignments/src/MV3500Cohort2023MarchJune/homework3/Hedgcorth/ExampleSimulationProgram.java b/assignments/src/MV3500Cohort2023MarchJune/homework3/Hedgcorth/ExampleSimulationProgram.java index 0fb320fec4ab75f4b0864ff06a6c30a7e5d52d47..4424f6e4a77772a106ddf7fb785abcc2839feda1 100644 --- a/assignments/src/MV3500Cohort2023MarchJune/homework3/Hedgcorth/ExampleSimulationProgram.java +++ b/assignments/src/MV3500Cohort2023MarchJune/homework3/Hedgcorth/ExampleSimulationProgram.java @@ -13,15 +13,22 @@ import edu.nps.moves.dis7.utilities.PduFactory; import java.time.LocalDateTime; import java.util.logging.Level; import java.util.logging.Logger; +import simkit.Schedule; +import simkit.random.RandomVariate; +import simkit.random.RandomVariateFactory; +import simkit.util.SimplePropertyDumper; /** + * The purpose of this program is to provide an easily modifiable example + * simulation program that includes DIS-capable entities doing tasks and + * reporting them to the network. Default settings include PDU recording turned + * on by default. * * @author leahhedgcorth */ public class ExampleSimulationProgram { /* **************************** infrastructure code, modification is seldom needed ************************* */ - private String descriptor = this.getClass().getSimpleName(); /** * DIS channel defined by network address/port combination includes multiple @@ -48,7 +55,7 @@ public class ExampleSimulationProgram { /** * Maximum number of simulation loops */ - int MAX_LOOP_COUNT = 4; + int MAX_LOOP_COUNT = 10; String narrativeMessage1 = new String(); String narrativeMessage2 = new String(); @@ -216,7 +223,7 @@ public class ExampleSimulationProgram { @SuppressWarnings("SleepWhileInLoop") // yes we might do that public void runSimulationLoops() { try { - final int SIMULATION_MAX_LOOP_COUNT = 10; // be deliberate out there! also avoid infinite loops. + final int SIMULATION_MAX_LOOP_COUNT = 20; // be deliberate out there! also avoid infinite loops. int simulationLoopCount = 0; // variable, initialized at 0 boolean simulationComplete = false; // sentinel variable as termination condition, are we done yet? @@ -235,6 +242,23 @@ public class ExampleSimulationProgram { // ============================================================================================= // * your own simulation code starts here! ***************************************************** // ============================================================================================= + + RandomVariate interarrivalTimeGenerator = RandomVariateFactory.getInstance("Exponential", 3.2); + ArrivalProcess arrivalProcess = new ArrivalProcess(interarrivalTimeGenerator); + + SimplePropertyDumper simplePropertyDumper = new SimplePropertyDumper(); + arrivalProcess.addPropertyChangeListener(simplePropertyDumper); + + System.out.println(arrivalProcess); + + Schedule.stopAtTime(15.0); + Schedule.setVerbose(true); + + Schedule.reset(); + Schedule.startSimulation(); + System.out.println("At time " + Schedule.getSimTime() + " there have been " + arrivalProcess.getNumberArrivals() + " arrivals"); + + // are there any other variables to modify at the beginning of your loop? // are your reading any DIS PDUs from the network? check for them here // compute a track, update an ESPDU, whatever it is that your model is doing... diff --git a/assignments/src/MV3500Cohort2023MarchJune/homework3/Hedgcorth/README.md b/assignments/src/MV3500Cohort2023MarchJune/homework3/Hedgcorth/README.md index fbb12a9a1e345135b7b239319f6aa34e560cfc0f..93941d70567ac94cf37c6dd3bc28fa99a6d13bb8 100644 --- a/assignments/src/MV3500Cohort2023MarchJune/homework3/Hedgcorth/README.md +++ b/assignments/src/MV3500Cohort2023MarchJune/homework3/Hedgcorth/README.md @@ -1 +1,6 @@ This program does something different... + +I changed the MAX_LOOP_COUNT value to 10 and changed SIMULATION_LOOP_COUNT value +to 20. I also added code to run the Arrival Process Simulation program and +output the number of arrivals. + diff --git a/assignments/src/MV3500Cohort2023MarchJune/homework3/Hedgcorth/package-info.java b/assignments/src/MV3500Cohort2023MarchJune/homework3/Hedgcorth/package-info.java index 777b258fd7652d67e6cea6b5da1bfa0c51491417..291e392c4c21d577bb6e3e406bdd97c1932cb8da 100644 --- a/assignments/src/MV3500Cohort2023MarchJune/homework3/Hedgcorth/package-info.java +++ b/assignments/src/MV3500Cohort2023MarchJune/homework3/Hedgcorth/package-info.java @@ -1,5 +1,6 @@ /** * Assignment 3 - Example Simulation Program for MV3500. + * Final project assignments supporting the NPS MOVES MV3500 Networked Graphics course. * * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments">networkedGraphicsMV3500 assignments</a> * @see java.lang.Package diff --git a/assignments/src/MV3500Cohort2023MarchJune/homework3/Islas/README b/assignments/src/MV3500Cohort2023MarchJune/homework3/Islas/README new file mode 100644 index 0000000000000000000000000000000000000000..e1ebccf7401e8e9aee8b7339d162eedf4d74be1d --- /dev/null +++ b/assignments/src/MV3500Cohort2023MarchJune/homework3/Islas/README @@ -0,0 +1,5 @@ +This program sets two entities on a single axis, one friendly and one enemy. The friendly +entity advances towards the enemy with each simulation step and fires munitions when in range. + +The simulation length was reduced to three timesteps, stopping on the final timestep needed for the +friendly entity to be within range of engaging the enemy entity. \ No newline at end of file diff --git a/assignments/src/MV3500Cohort2023MarchJune/homework3/Sloan/PduCaptureLog3.dislog b/assignments/src/MV3500Cohort2023MarchJune/homework3/Sloan/PduCaptureLog3.dislog new file mode 100644 index 0000000000000000000000000000000000000000..b04a0aad96f1aee0de9bc0165c43446395cbca6a --- /dev/null +++ b/assignments/src/MV3500Cohort2023MarchJune/homework3/Sloan/PduCaptureLog3.dislog @@ -0,0 +1,48 @@ +# Start, ENCODING_PLAINTEXT, [PduRecorder ExampleSimulationProgramFisher_2 pduRecorder] 20230510_121630, DIS capture file, .\pduLog\PduCaptureLog3.dislog +# Timestamp(8 bytes),ProtocolVersion,CompatibilityVersion,ExerciseID,PduType,PduStatus,HeaderLength,PduLength,then PDU-specific data +# ============================================= +# DisPduType 01 ENTITY_STATE, Session time 12:16:30.1, session duration 00:00:00.0, Pdu timestamp 1180032719 18:51:59.0, simulation stream interval 0 00:00:00.0 +0,0,40,48,-49,-40,32,-83,7,1,1,1,70,85,-34,-49,0,-112,40,0,0,1,0,2,0,3,1,0,0,0,0,-31,0,0,0,0,0,0,0,-31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,63,-16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,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, Session time 12:16:30.2, session duration 00:00:00.0, Pdu timestamp 1180037491 20:11:31.0, simulation stream interval 4772 01:19:32.0 +0,0,0,0,5,-89,55,28,7,1,2,2,70,85,-15,115,0,96,40,0,0,2,0,3,0,0,0,2,0,3,0,0,0,2,0,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,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-31,0,0,0,0,0,0,0,0,0,0,0,0,63,-128,0,0,64,-96,0,0,0,0,0,0,68,-69,-128,0 +# DisPduType 22 COMMENT, Session time 12:16:30.3, session duration 00:00:00.1, Pdu timestamp 1181481079 13:11:19.0, simulation stream interval 1448360 18:19:20.0 +0,0,0,0,11,-24,-11,52,7,1,22,5,70,107,-8,119,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,-81,-46,0,0,1,56,77,86,51,53,48,48,32,69,120,97,109,112,108,101,83,105,109,117,108,97,116,105,111,110,80,114,111,103,114,97,109,70,105,115,104,101,114,95,50,0,0,0,-81,-46,0,0,0,-80,114,117,110,83,105,109,117,108,97,116,105,111,110,40,41,32,108,111,111,112,32,49,0,0,0,0,-81,-46,0,0,0,-128,116,104,105,115,32,105,115,32,119,111,114,107,105,110,103,33 +# DisPduType 01 ENTITY_STATE, Session time 12:16:30.4, session duration 00:00:00.2, Pdu timestamp 1180033913 19:11:53.0, simulation stream interval 1194 00:19:54.0 +0,0,0,0,17,-44,73,-48,7,1,1,1,70,85,-29,121,0,-112,40,0,0,4,0,5,0,6,2,0,0,0,0,-31,0,0,0,0,0,0,0,-31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,34,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,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, Session time 12:16:31.5, session duration 00:00:01.4, Pdu timestamp 1180032719 18:51:59.0, simulation stream interval 0 00:00:00.0 +0,0,0,0,84,-117,-85,76,7,1,1,1,70,85,-34,-49,0,-112,40,0,0,1,0,2,0,3,1,0,0,0,0,-31,0,0,0,0,0,0,0,-31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,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, Session time 12:16:31.6, session duration 00:00:01.5, Pdu timestamp 1180037491 20:11:31.0, simulation stream interval 4772 01:19:32.0 +0,0,0,0,90,-69,-125,-64,7,1,2,2,70,85,-15,115,0,96,40,0,0,2,0,3,0,0,0,2,0,3,0,0,0,2,0,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,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-31,0,0,0,0,0,0,0,0,0,0,0,0,63,-128,0,0,64,-96,0,0,0,0,0,0,68,-69,-128,0 +# DisPduType 22 COMMENT, Session time 12:16:31.7, session duration 00:00:01.6, Pdu timestamp 1183199065 10:24:25.0, simulation stream interval 3166346 15:32:26.0 +0,0,0,0,97,-117,-4,-124,7,1,22,5,70,-122,47,89,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,-81,-46,0,0,1,56,77,86,51,53,48,48,32,69,120,97,109,112,108,101,83,105,109,117,108,97,116,105,111,110,80,114,111,103,114,97,109,70,105,115,104,101,114,95,50,0,0,0,-81,-46,0,0,0,-80,114,117,110,83,105,109,117,108,97,116,105,111,110,40,41,32,108,111,111,112,32,50,0,0,0,0,-81,-46,0,0,0,-128,116,104,105,115,32,105,115,32,119,111,114,107,105,110,103,33 +# DisPduType 01 ENTITY_STATE, Session time 12:16:31.8, session duration 00:00:01.7, Pdu timestamp 1180033913 19:11:53.0, simulation stream interval 1194 00:19:54.0 +0,0,0,0,104,66,-102,-20,7,1,1,1,70,85,-29,121,0,-112,40,0,0,4,0,5,0,6,2,0,0,0,0,-31,0,0,0,0,0,0,0,-31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,32,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,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, Session time 12:16:32.9, session duration 00:00:02.8, Pdu timestamp 1180032719 18:51:59.0, simulation stream interval 0 00:00:00.0 +0,0,0,0,-86,-99,55,-108,7,1,1,1,70,85,-34,-49,0,-112,40,0,0,1,0,2,0,3,1,0,0,0,0,-31,0,0,0,0,0,0,0,-31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,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,0,0,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, Session time 12:16:33.0, session duration 00:00:02.9, Pdu timestamp 1180037491 20:11:31.0, simulation stream interval 4772 01:19:32.0 +0,0,0,0,-80,-17,-78,-44,7,1,2,2,70,85,-15,115,0,96,40,0,0,2,0,3,0,0,0,2,0,3,0,0,0,2,0,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,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-31,0,0,0,0,0,0,0,0,0,0,0,0,63,-128,0,0,64,-96,0,0,0,0,0,0,68,-69,-128,0 +# DisPduType 22 COMMENT, Session time 12:16:33.1, session duration 00:00:03.0, Pdu timestamp 1184930175 11:16:15.0, simulation stream interval 4897456 16:24:16.0 +0,0,0,0,-73,-5,69,72,7,1,22,5,70,-96,-103,127,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,-81,-46,0,0,1,56,77,86,51,53,48,48,32,69,120,97,109,112,108,101,83,105,109,117,108,97,116,105,111,110,80,114,111,103,114,97,109,70,105,115,104,101,114,95,50,0,0,0,-81,-46,0,0,0,-80,114,117,110,83,105,109,117,108,97,116,105,111,110,40,41,32,108,111,111,112,32,51,0,0,0,0,-81,-46,0,0,0,-128,116,104,105,115,32,105,115,32,119,111,114,107,105,110,103,33 +# DisPduType 01 ENTITY_STATE, Session time 12:16:33.3, session duration 00:00:03.2, Pdu timestamp 1180033913 19:11:53.0, simulation stream interval 1194 00:19:54.0 +0,0,0,0,-65,51,-27,84,7,1,1,1,70,85,-29,121,0,-112,40,0,0,4,0,5,0,6,2,0,0,0,0,-31,0,0,0,0,0,0,0,-31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,28,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,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, Session time 12:16:34.4, session duration 00:00:04.3, Pdu timestamp 1180032719 18:51:59.0, simulation stream interval 0 00:00:00.0 +0,0,0,1,1,-66,6,-44,7,1,1,1,70,85,-34,-49,0,-112,40,0,0,1,0,2,0,3,1,0,0,0,0,-31,0,0,0,0,0,0,0,-31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,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, Session time 12:16:34.5, session duration 00:00:04.4, Pdu timestamp 1180037491 20:11:31.0, simulation stream interval 4772 01:19:32.0 +0,0,0,1,8,-104,119,-16,7,1,2,2,70,85,-15,115,0,96,40,0,0,2,0,3,0,0,0,2,0,3,0,0,0,2,0,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,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-31,0,0,0,0,0,0,0,0,0,0,0,0,63,-128,0,0,64,-96,0,0,0,0,0,0,68,-69,-128,0 +# DisPduType 22 COMMENT, Session time 12:16:34.6, session duration 00:00:04.5, Pdu timestamp 1186667251 13:47:31.0, simulation stream interval 6634532 18:55:32.0 +0,0,0,1,14,-62,-64,-112,7,1,22,5,70,-69,26,-13,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,-81,-46,0,0,1,56,77,86,51,53,48,48,32,69,120,97,109,112,108,101,83,105,109,117,108,97,116,105,111,110,80,114,111,103,114,97,109,70,105,115,104,101,114,95,50,0,0,0,-81,-46,0,0,0,-80,114,117,110,83,105,109,117,108,97,116,105,111,110,40,41,32,108,111,111,112,32,52,0,0,0,0,-81,-46,0,0,0,-128,116,104,105,115,32,105,115,32,119,111,114,107,105,110,103,33 +# DisPduType 01 ENTITY_STATE, Session time 12:16:34.7, session duration 00:00:04.6, Pdu timestamp 1180033913 19:11:53.0, simulation stream interval 1194 00:19:54.0 +0,0,0,1,21,89,-34,-24,7,1,1,1,70,85,-29,121,0,-112,40,0,0,4,0,5,0,6,2,0,0,0,0,-31,0,0,0,0,0,0,0,-31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,24,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,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, Session time 12:16:35.8, session duration 00:00:05.7, Pdu timestamp 1180032719 18:51:59.0, simulation stream interval 0 00:00:00.0 +0,0,0,1,87,-12,-85,52,7,1,1,1,70,85,-34,-49,0,-112,40,0,0,1,0,2,0,3,1,0,0,0,0,-31,0,0,0,0,0,0,0,-31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,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, Session time 12:16:35.9, session duration 00:00:05.8, Pdu timestamp 1180037491 20:11:31.0, simulation stream interval 4772 01:19:32.0 +0,0,0,1,94,102,-75,92,7,1,2,2,70,85,-15,115,0,96,40,0,0,2,0,3,0,0,0,2,0,3,0,0,0,2,0,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,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-31,0,0,0,0,0,0,0,0,0,0,0,0,63,-128,0,0,64,-96,0,0,0,0,0,0,68,-69,-128,0 +# DisPduType 22 COMMENT, Session time 12:16:36.1, session duration 00:00:05.9, Pdu timestamp 1188398361 14:39:21.0, simulation stream interval 8365642 19:47:22.0 +0,0,0,1,101,65,-61,-128,7,1,22,5,70,-43,-123,25,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,-81,-46,0,0,1,56,77,86,51,53,48,48,32,69,120,97,109,112,108,101,83,105,109,117,108,97,116,105,111,110,80,114,111,103,114,97,109,70,105,115,104,101,114,95,50,0,0,0,-81,-46,0,0,0,-80,114,117,110,83,105,109,117,108,97,116,105,111,110,40,41,32,108,111,111,112,32,53,0,0,0,0,-81,-46,0,0,0,-128,116,104,105,115,32,105,115,32,119,111,114,107,105,110,103,33 +# DisPduType 01 ENTITY_STATE, Session time 12:16:36.2, session duration 00:00:06.1, Pdu timestamp 1180033913 19:11:53.0, simulation stream interval 1194 00:19:54.0 +0,0,0,1,107,-45,93,88,7,1,1,1,70,85,-29,121,0,-112,40,0,0,4,0,5,0,6,2,0,0,0,0,-31,0,0,0,0,0,0,0,-31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,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, Session time 12:16:36.3, session duration 00:00:06.2, Pdu timestamp 1180038685 20:31:25.0, simulation stream interval 5966 01:39:26.0 +0,0,0,1,114,44,-7,-104,7,1,3,2,70,85,-10,29,0,104,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,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,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,0,30,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +# DisPduType 22 COMMENT, Session time 12:16:36.4, session duration 00:00:06.3, Pdu timestamp 1188788487 03:01:27.0, simulation stream interval 8755768 08:09:28.0 +0,0,0,1,120,-45,-46,28,7,1,22,5,70,-37,121,7,0,32,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,9,90,-90,0,0,1,56,77,86,51,53,48,48,32,69,120,97,109,112,108,101,83,105,109,117,108,97,116,105,111,110,80,114,111,103,114,97,109,70,105,115,104,101,114,95,50,0,0,9,90,-90,0,0,1,48,114,117,110,83,105,109,117,108,97,116,105,111,110,40,41,32,99,111,109,112,108,101,116,101,100,32,115,117,99,99,101,115,115,102,117,108,108,121,0,0,0,9,90,-90,0,0,0,-128,116,104,105,115,32,105,115,32,119,111,114,107,105,110,103,33 +# Finish, ENCODING_PLAINTEXT, [PduRecorder ExampleSimulationProgramFisher_2 pduRecorder] 20230510_121638, DIS capture file, .\pduLog\PduCaptureLog3.dislog diff --git a/assignments/src/MV3500Cohort2023MarchJune/homework3/Sloan/README.md b/assignments/src/MV3500Cohort2023MarchJune/homework3/Sloan/README.md new file mode 100644 index 0000000000000000000000000000000000000000..92a9323f81390081983062a3749602dc80ed824f --- /dev/null +++ b/assignments/src/MV3500Cohort2023MarchJune/homework3/Sloan/README.md @@ -0,0 +1,15 @@ +## Homework 3: Example Simulation Recording using OpenDIS Network Streams + +Sloan Assignment 3 + +Changes to the ExampleSimulation.JAVA program: +*Built in a manner to test basic PDU sending processes within a simulation +*Instantiates new Entity's as type Crane for follow on state transitions / updating +*Selects each entity's affiliation as opposing in the simulation +*pulls coordinate values of each entity. As the loop cycles the program begins moving the +relative locations of the entity's in a certain direction of travel +*As the units move in thier given directions of travel the program prints thier +relative location to output. + + + diff --git a/assignments/src/MV3500Cohort2023MarchJune/homework4/README.md b/assignments/src/MV3500Cohort2023MarchJune/homework4/README.md index 587911d33c740f7341226132a1c7c6fa78a94cfb..8b37870df619103d102fe351df69f9ba77d8e5a9 100644 --- a/assignments/src/MV3500Cohort2023MarchJune/homework4/README.md +++ b/assignments/src/MV3500Cohort2023MarchJune/homework4/README.md @@ -18,3 +18,8 @@ Deliverables: Please see the [README.md](../../../README.md) in the parent [assignments](../../../../assignments) directory for detailed instructions. + + +In class Discussion: + How might PDUs look for a drone swarm? + Two perspectives may be necessary. The first is that each drone is it's own entity, requiring it's own PDU. The second is that the swarm itself is also an entity, and should have a PDU that reflects the group as well. diff --git a/presentations/11a_Certificates_PKI.ppt b/presentations/11a_Certificates_PKI.ppt index 62a6118b9bd570d7799bb9565c582a0911c2acfe..3c174dce6fbc1e57945d7f2e379eaf7e0b70e2b2 100644 Binary files a/presentations/11a_Certificates_PKI.ppt and b/presentations/11a_Certificates_PKI.ppt differ