Skip to content
Snippets Groups Projects
Commit fd9370ff authored by rojas's avatar rojas
Browse files

Merge origin/master

Conflicts:
	examples/nbproject/project.properties
parent 4525179c
No related branches found
No related tags found
No related merge requests found
Showing
with 974 additions and 591 deletions
annotation.processing.enabled=true annotation.processing.enabled=true
annotation.processing.enabled.in.editor=false annotation.processing.enabled.in.editor=false
annotation.processing.processors.list= annotation.processing.processors.list=
annotation.processing.run.all.processors=true annotation.processing.run.all.processors=true
annotation.processing.source.output=${build.generated.sources.dir}/ap-source-output annotation.processing.source.output=${build.generated.sources.dir}/ap-source-output
application.desc=Student assignments performed as part of NPS course Networked Graphics MV3500. This course is an introduction to network communications in simulation applications. Topics include an introduction to the TCP/IP protocol stack; TCP/IP socket communications, including TCP, UDP, and multicast; and protocol design issues, with emphasis on Distributed Interactive Simulation (DIS) Protocol and High Level Architecture (HLA). Course emphasis is on creation and testing of network programming network code and web-browser applications. application.desc=Student assignments performed as part of NPS course Networked Graphics MV3500. This course is an introduction to network communications in simulation applications. Topics include an introduction to the TCP/IP protocol stack; TCP/IP socket communications, including TCP, UDP, and multicast; and protocol design issues, with emphasis on Distributed Interactive Simulation (DIS) Protocol and High Level Architecture (HLA). Course emphasis is on creation and testing of network programming network code and web-browser applications.
application.homepage=https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/tree/master/assignments application.homepage=https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/tree/master/assignments
application.splash=../..\\NetworkedGraphicsMV3500\\documentation\\images\\OpenDisSurferDude.png application.splash=../..\\NetworkedGraphicsMV3500\\documentation\\images\\OpenDisSurferDude.png
application.title=NPS Networked Graphics MV3500 assignments application.title=NPS Networked Graphics MV3500 assignments
application.vendor=Don Brutzman application.vendor=Don Brutzman
auxiliary.org-netbeans-spi-editor-hints-projects.perProjectHintSettingsFile=nbproject/cfg_hints.xml auxiliary.org-netbeans-spi-editor-hints-projects.perProjectHintSettingsFile=nbproject/cfg_hints.xml
build.classes.dir=${build.dir}/classes build.classes.dir=${build.dir}/classes
build.classes.excludes=**/*.java,**/*.form build.classes.excludes=**/*.java,**/*.form
# This directory is removed when the project is cleaned: # This directory is removed when the project is cleaned:
build.dir=build build.dir=build
build.generated.dir=${build.dir}/generated build.generated.dir=${build.dir}/generated
build.generated.sources.dir=${build.dir}/generated-sources build.generated.sources.dir=${build.dir}/generated-sources
# Only compile against the classpath explicitly listed here: # Only compile against the classpath explicitly listed here:
build.sysclasspath=ignore build.sysclasspath=ignore
build.test.classes.dir=${build.dir}/test/classes build.test.classes.dir=${build.dir}/test/classes
build.test.results.dir=${build.dir}/test/results build.test.results.dir=${build.dir}/test/results
# Uncomment to specify the preferred debugger connection transport: # Uncomment to specify the preferred debugger connection transport:
#debug.transport=dt_socket #debug.transport=dt_socket
debug.classpath=\ debug.classpath=\
${run.classpath} ${run.classpath}
debug.modulepath=\ debug.modulepath=\
${run.modulepath} ${run.modulepath}
debug.test.classpath=\ debug.test.classpath=\
${run.test.classpath} ${run.test.classpath}
debug.test.modulepath=\ debug.test.modulepath=\
${run.test.modulepath} ${run.test.modulepath}
# Files in build.classes.dir which should be excluded from distribution jar # Files in build.classes.dir which should be excluded from distribution jar
# Avoid compilation or inclusion of student project depending on mutex libraries only available in JDK8 # Avoid compilation or inclusion of student project depending on mutex libraries only available in JDK8
# https://stackoverflow.com/questions/27906896/exclude-package-from-build-but-not-from-view-in-netbeans-8 # https://stackoverflow.com/questions/27906896/exclude-package-from-build-but-not-from-view-in-netbeans-8
excludes=**/MV3500Cohort2019JulySeptember/projects/BrennenstuhlKnobelochMcCann/** excludes=**/MV3500Cohort2019JulySeptember/projects/BrennenstuhlKnobelochMcCann/**
dist.archive.excludes=**/MV3500Cohort2019JulySeptember/projects/BrennenstuhlKnobelochMcCann/** dist.archive.excludes=**/MV3500Cohort2019JulySeptember/projects/BrennenstuhlKnobelochMcCann/**
# This directory is removed when the project is cleaned: # This directory is removed when the project is cleaned:
dist.dir=dist dist.dir=dist
dist.jar=${dist.dir}/Networked_Graphics_MV3500_assignments.jar dist.jar=${dist.dir}/Networked_Graphics_MV3500_assignments.jar
dist.javadoc.dir=${dist.dir}/javadoc dist.javadoc.dir=${dist.dir}/javadoc
endorsed.classpath= endorsed.classpath=
file.reference.dis-enums-1.3.jar=../lib/dis-enums-1.3.jar file.reference.dis-enums-1.3.jar=../lib/dis-enums-1.3.jar
file.reference.opendis7-full.jar=../lib/opendis7-full.jar file.reference.opendis7-full.jar=../lib/opendis7-full.jar
file.reference.open-dis_4.16.jar=../lib/open-dis_4.16.jar file.reference.open-dis_4.16.jar=../lib/open-dis_4.16.jar
file.reference.simkit-doc.zip=../lib/simkit-doc.zip file.reference.simkit-doc.zip=../lib/simkit-doc.zip
file.reference.simkit-src.zip=../lib/simkit-src.zip file.reference.simkit-src.zip=../lib/simkit-src.zip
file.reference.simkit.jar=../lib/simkit.jar file.reference.simkit.jar=../lib/simkit.jar
#file.reference.opendis7-enumerations-classes.jar=../lib/opendis7-enumerations-classes.jar #file.reference.opendis7-enumerations-classes.jar=../lib/opendis7-enumerations-classes.jar
#file.reference.opendis7-pdus-classes.jar=../lib/opendis7-pdus-classes.jar #file.reference.opendis7-pdus-classes.jar=../lib/opendis7-pdus-classes.jar
includes=** includes=**
jar.archive.disabled=${jnlp.enabled} jar.archive.disabled=${jnlp.enabled}
jar.compress=false jar.compress=false
jar.index=${jnlp.enabled} jar.index=${jnlp.enabled}
javac.classpath=\ javac.classpath=\
${file.reference.opendis7-full.jar}:\ ${file.reference.opendis7-full.jar}:\
${file.reference.dis-enums-1.3.jar}:\ ${file.reference.dis-enums-1.3.jar}:\
${file.reference.open-dis_4.16.jar}:\ ${file.reference.open-dis_4.16.jar}:\
${file.reference.simkit-doc.zip}:\ ${file.reference.simkit-doc.zip}:\
${file.reference.simkit-src.zip}:\ ${file.reference.simkit-src.zip}:\
${file.reference.simkit.jar} ${file.reference.simkit.jar}
# ${file.reference.opendis7-enumerations-classes.jar}:\ # ${file.reference.opendis7-enumerations-classes.jar}:\
# ${file.reference.opendis7-pdus-classes.jar}:\ # ${file.reference.opendis7-pdus-classes.jar}:\
# Space-separated list of extra javac options # Space-separated list of extra javac options
javac.compilerargs=-Xlint:deprecation -Xlint:unchecked javac.compilerargs=-Xlint:deprecation -Xlint:unchecked
javac.deprecation=false javac.deprecation=false
javac.external.vm=true javac.external.vm=true
javac.modulepath= javac.modulepath=
javac.processormodulepath= javac.processormodulepath=
javac.processorpath=\ javac.processorpath=\
${javac.classpath} ${javac.classpath}
javac.source=22 javac.source=22
javac.target=22 javac.target=22
javac.test.classpath=\ javac.test.classpath=\
${javac.classpath}:\ ${javac.classpath}:\
${build.classes.dir} ${build.classes.dir}
javac.test.modulepath=\ javac.test.modulepath=\
${javac.modulepath} ${javac.modulepath}
javac.test.processorpath=\ javac.test.processorpath=\
${javac.test.classpath} ${javac.test.classpath}
javadoc.additionalparam=-header "NPS Networked Graphics MV3500 Assignments" javadoc.additionalparam=-header "NPS Networked Graphics MV3500 Assignments"
javadoc.author=true javadoc.author=true
javadoc.encoding=${source.encoding} javadoc.encoding=${source.encoding}
javadoc.html5=false javadoc.html5=false
javadoc.noindex=false javadoc.noindex=false
javadoc.nonavbar=false javadoc.nonavbar=false
javadoc.notree=false javadoc.notree=false
javadoc.private=false javadoc.private=false
#javadoc.reference.opendis7-enumerations-classes.jar=../lib/opendis7-enumerations-javadoc.jar #javadoc.reference.opendis7-enumerations-classes.jar=../lib/opendis7-enumerations-javadoc.jar
javadoc.splitindex=true javadoc.splitindex=true
javadoc.use=true javadoc.use=true
javadoc.version=false javadoc.version=false
javadoc.windowtitle=MV3500 Assignments javadoc.windowtitle=MV3500 Assignments
jlink.launcher=false jlink.launcher=false
jlink.launcher.name=Networked_Graphics_MV3500_assignments jlink.launcher.name=Networked_Graphics_MV3500_assignments
jnlp.codebase.type=no.codebase jnlp.codebase.type=no.codebase
jnlp.descriptor=application jnlp.descriptor=application
jnlp.enabled=false jnlp.enabled=false
jnlp.mixed.code=default jnlp.mixed.code=default
jnlp.offline-allowed=false jnlp.offline-allowed=false
jnlp.signed=false jnlp.signed=false
jnlp.signing= jnlp.signing=
jnlp.signing.alias= jnlp.signing.alias=
jnlp.signing.keystore= jnlp.signing.keystore=
# Optional override of default Application-Library-Allowable-Codebase attribute identifying the locations where your signed RIA is expected to be found. # Optional override of default Application-Library-Allowable-Codebase attribute identifying the locations where your signed RIA is expected to be found.
manifest.custom.application.library.allowable.codebase= manifest.custom.application.library.allowable.codebase=
# Optional override of default Caller-Allowable-Codebase attribute identifying the domains from which JavaScript code can make calls to your RIA without security prompts. # Optional override of default Caller-Allowable-Codebase attribute identifying the domains from which JavaScript code can make calls to your RIA without security prompts.
manifest.custom.caller.allowable.codebase= manifest.custom.caller.allowable.codebase=
# Optional override of default Codebase manifest attribute, use to prevent RIAs from being repurposed # Optional override of default Codebase manifest attribute, use to prevent RIAs from being repurposed
manifest.custom.codebase= manifest.custom.codebase=
# Optional override of default Permissions manifest attribute (supported values: sandbox, all-permissions) # Optional override of default Permissions manifest attribute (supported values: sandbox, all-permissions)
manifest.custom.permissions= manifest.custom.permissions=
meta.inf.dir=${src.dir}/META-INF meta.inf.dir=${src.dir}/META-INF
mkdist.disabled=false mkdist.disabled=false
platform.active=JDK_22 platform.active=JDK_22
project.licensePath=../license.txt project.licensePath=../license.txt
run.classpath=\ run.classpath=\
${javac.classpath}:\ ${javac.classpath}:\
${build.classes.dir} ${build.classes.dir}
# Space-separated list of JVM arguments used when running the project. # Space-separated list of JVM arguments used when running the project.
# You may also define separate properties like run-sys-prop.name=value instead of -Dname=value. # You may also define separate properties like run-sys-prop.name=value instead of -Dname=value.
# To set system properties for unit tests define test-sys-prop.name=value: # To set system properties for unit tests define test-sys-prop.name=value:
run.jvmargs= run.jvmargs=
run.modulepath=\ run.modulepath=\
${javac.modulepath} ${javac.modulepath}
run.test.classpath=\ run.test.classpath=\
${javac.test.classpath}:\ ${javac.test.classpath}:\
${build.test.classes.dir} ${build.test.classes.dir}
run.test.modulepath=\ run.test.modulepath=\
${javac.test.modulepath} ${javac.test.modulepath}
source.encoding=UTF-8 source.encoding=UTF-8
#source.reference.opendis7-enumerations-classes.jar=../lib/opendis7-enumerations-source.jar #source.reference.opendis7-enumerations-classes.jar=../lib/opendis7-enumerations-source.jar
src.dir=src src.dir=src
test.src.dir=test test.src.dir=test
...@@ -4,7 +4,6 @@ ...@@ -4,7 +4,6 @@
<configuration> <configuration>
<data xmlns="http://www.netbeans.org/ns/j2se-project/3"> <data xmlns="http://www.netbeans.org/ns/j2se-project/3">
<name>Networked Graphics MV3500 assignments</name> <name>Networked Graphics MV3500 assignments</name>
<explicit-platform explicit-source-supported="true"/>
<source-roots> <source-roots>
<root id="src.dir"/> <root id="src.dir"/>
</source-roots> </source-roots>
......
...@@ -21,6 +21,7 @@ public class SchnitzlerUnicastNetworking { ...@@ -21,6 +21,7 @@ public class SchnitzlerUnicastNetworking {
} }
/** /**
* Program invocation, execution starts here
* @param args the command line arguments * @param args the command line arguments
*/ */
public static void main(String[] args) { public static void main(String[] args) {
......
...@@ -13,11 +13,22 @@ import java.util.Scanner; ...@@ -13,11 +13,22 @@ import java.util.Scanner;
* @author simonschnitzler * @author simonschnitzler
*/ */
public class SchnitzlerClient { public class SchnitzlerClient {
/** Default constructor */
public SchnitzlerClient(){
// default constructor
}
/** IPv6 String constant for localhost address, similarly IPv4 127.0.0.1
* @see <a href="https://en.wikipedia.org/wiki/localhost" target="_blank">https://en.wikipedia.org/wiki/localhost</a>
* @see <a href="https://en.wikipedia.org/wiki/IPv6_address" target="_blank">https://en.wikipedia.org/wiki/IPv6_address</a>
*/
public final static String LOCALHOST = "0:0:0:0:0:0:0:1"; //Local host public final static String LOCALHOST = "0:0:0:0:0:0:0:1"; //Local host
/** /**
* Program invocation, execution starts here
* @param args the command line arguments * @param args the command line arguments
* @throws java.lang.Exception * @throws java.lang.Exception if connection failed
*/ */
public static void main(String[] args) throws Exception { public static void main(String[] args) throws Exception {
Socket socket = new Socket(LOCALHOST, 2317); Socket socket = new Socket(LOCALHOST, 2317);
......
...@@ -16,10 +16,18 @@ import java.util.Set; ...@@ -16,10 +16,18 @@ import java.util.Set;
* @author simonschnitzler * @author simonschnitzler
*/ */
public class SchnitzlerServer { public class SchnitzlerServer {
/** Default constructor */
public SchnitzlerServer(){
// default constructor
}
// the set clientWriters contains form all sockets the active PrintStream // the set clientWriters contains form all sockets the active PrintStream
private static Set<PrintWriter> clientWriters = new HashSet<>(); private static Set<PrintWriter> clientWriters = new HashSet<>();
/** /**
* Program invocation, execution starts here
*
* @param args the command line arguments * @param args the command line arguments
*/ */
public static void main(String[] args) { public static void main(String[] args) {
......
/**
* Copyright (c) 2008-2024, MOVES Institute, Naval Postgraduate School (NPS). All rights reserved.
* This work is provided under a BSD open-source license, see project license.html or license.txt
*
* This main class is my submission for HW 3.
*
* @author ethanjwilliams
*/
package MV3500Cohort2024JulySeptember.homework3.Williams;
import edu.nps.moves.dis7.entities.swe.platform.surface._001Poseidon;
import edu.nps.moves.dis7.entities.swe.platform.surface._002Triton;
import edu.nps.moves.dis7.enumerations.*;
import edu.nps.moves.dis7.pdus.*;
import edu.nps.moves.dis7.utilities.DisChannel;
import edu.nps.moves.dis7.utilities.PduFactory;
import java.time.LocalDateTime;
import java.util.logging.Level;
import java.util.logging.Logger;
/**
* The purpose of this inheritable class is to provide an easily modifiable
* example simulation program that includes DIS-capable entities performing
* tasks of interest, and then reporting activity via PDUs to the network.
* Default program initialization includes PDU recording turned on by default.
*
* Homework 3 Networking choices:
* This simulation uses UDP multicast for efficient distribution of PDUs to
* multiple participants, which is suitable for large-scale simulations where
* state updates need to reach all networked participants. UDP is chosen over
* TCP due to its lower latency, which is essential for real-time simulations.
*
* @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/blob/master/examples/src/OpenDis7Examples/ExampleSimulationProgramLog.txt" target="_blank">ExampleSimulationProgramLog.txt</a>
* @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/blob/master/examples/src/OpenDis7Examples/ExampleSimulationProgramPduCaptureLog.dislog" target="_blank">ExampleSimulationProgramPduCaptureLog.dislog</a>
* @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/blob/master/examples/src/OpenDis7Examples/ExampleSimulationProgramFlowDiagram.pdf" target="_blank">ExampleSimulationProgramFlowDiagram.pdf</a>
* @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/blob/master/examples/src/OpenDis7Examples/ExampleSimulationProgramWireshark.png" target="_blank">ExampleSimulationProgramWireshark.png</a>
* @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/blob/master/examples/src/OpenDis7Examples/ExampleSimulationProgramSequenceDiagram.png" target="_blank">ExampleSimulationProgramSequenceDiagram.png</a>
*/
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 utility capabilities */
protected DisChannel disChannel;
/** Factory object used to create new PDU instances */
protected PduFactory pduFactory;
/** seconds per loop for real-time or simulation execution */
private double simulationTimeStepDuration = 1.0; // seconds TODO encapsulate
/** initial simulation time in seconds */
double simulationTimeInitial = 0.0;
/** current simulation time in seconds */
double simulationTimeSeconds = simulationTimeInitial;
/** Maximum number of simulation loops */
int MAX_LOOP_COUNT = 4;
String narrativeMessage1 = new String();
String narrativeMessage2 = new String();
String narrativeMessage3 = new String();
/** EntityID settings for entity 1 */
protected EntityID entityID_1 = new EntityID();
/** EntityID settings for entity 2 */
protected EntityID entityID_2 = new EntityID();
/** ESPDU for entity 1 */
protected EntityStatePdu entityStatePdu_1;
/** ESPDU for entity 2 */
protected EntityStatePdu entityStatePdu_2;
/** FirePdu for entity 1 first weapon (if any) */
protected FirePdu firePdu_1a;
/** FirePdu for entity 1 second weapon (if any) */
protected FirePdu firePdu_1b;
/** MunitionDescriptor for these weapons */
protected MunitionDescriptor munitionDescriptor1;
/**
* Constructor to create an instance of this class.
* Design goal: additional built-in initialization conveniences can go here
* to keep your efforts focused on the runSimulation() method.
*/
public ExampleSimulationProgram()
{
initialize();
}
/**
* Constructor to create an instance of this class.
* @param newDescriptor describes this program, useful for logging and debugging
*/
public ExampleSimulationProgram(String newDescriptor)
{
descriptor = newDescriptor;
initialize();
}
/**
* 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)
{
disChannel.setNetworkAddress(address);
disChannel.setNetworkPort(port);
disChannel.setVerboseComments(true);
disChannel.setVerboseDisNetworkInterface(true);
disChannel.setVerbosePduRecorder(true);
initialize();
}
/** Initialize channel setup for OpenDis7 and report a test PDU
* @see initializeDisChannel
* @see initializeSimulationEntities */
private void initialize()
{
initializeDisChannel();
initializeSimulationEntities();
disChannel.join();
String timeStepMessage = "Simulation timestep duration " + getSimulationTimeStepDuration() + " seconds";
disChannel.sendCommentPdu(simulationTimeSeconds, DisChannel.COMMENTPDU_SIMULATION_TIMESTEP, timeStepMessage);
}
/** Initialize channel setup for OpenDis7 and report a test PDU */
private void initializeDisChannel()
{
if (disChannel == null)
disChannel = new DisChannel();
else
{
disChannel.printlnTRACE ("*** warning, duplicate invocation of initializeDisChannel() ignored");
return;
}
pduFactory = disChannel.getPduFactory();
disChannel.setDescriptor(this.getClass().getSimpleName());
disChannel.setUpNetworkInterface();
disChannel.printlnTRACE ("just checking: disChannel.getNetworkAddress()=" + disChannel.getNetworkAddress() +
", getNetworkPort()=" + disChannel.getNetworkPort());
disChannel.getDisNetworkInterface().setVerbose(true);
disChannel.printlnTRACE ("just checking: hasVerboseSending()=" + disChannel.getDisNetworkInterface().hasVerboseSending() +
", hasVerboseReceipt()=" + disChannel.getDisNetworkInterface().hasVerboseReceipt());
disChannel.getPduRecorder().setVerbose(true);
}
/** Initialize simulation entities.
*/
public void initializeSimulationEntities()
{
if (pduFactory == null)
pduFactory = disChannel.getPduFactory();
entityStatePdu_1 = pduFactory.makeEntityStatePdu();
entityStatePdu_2 = pduFactory.makeEntityStatePdu();
firePdu_1a = pduFactory.makeFirePdu();
firePdu_1b = pduFactory.makeFirePdu();
munitionDescriptor1 = new MunitionDescriptor();
// Define participants
entityID_1.setSiteID(1).setApplicationID(2).setEntityID(3);
disChannel.addEntity(entityID_1);
entityID_2.setSiteID(1).setApplicationID(2).setEntityID(4);
disChannel.addEntity(entityID_2);
entityStatePdu_1.setEntityID(entityID_1);
entityStatePdu_1.setForceId(ForceID.FRIENDLY);
entityStatePdu_1.setEntityType(new _001Poseidon());
entityStatePdu_1.setMarking("Entity #53");
entityStatePdu_2.setEntityID(entityID_2);
entityStatePdu_2.setForceId(ForceID.OPPOSING);
entityStatePdu_2.setEntityType(new _002Triton());
entityStatePdu_2.setMarking("Entity #2");
munitionDescriptor1.setQuantity(1);
firePdu_1a.setDescriptor(munitionDescriptor1).setRange(1000.0f);
}
/**
* This runSimulationLoops() method is customizable for running new simulations.
*/
@SuppressWarnings("SleepWhileInLoop")
public void runSimulationLoops ()
{
try
{
final int SIMULATION_MAX_LOOP_COUNT = 10;
int simulationLoopCount = 0;
boolean simulationComplete = false;
String timeMessage = "Simulation time " + simulationTimeSeconds + " at LocalDateTime " + LocalDateTime.now();
disChannel.sendCommentPdu(simulationTimeSeconds, DisChannel.COMMENTPDU_TIME, timeMessage);
while (simulationLoopCount < SIMULATION_MAX_LOOP_COUNT)
{
simulationLoopCount++;
entityStatePdu_1.getEntityLocation().setX(entityStatePdu_1.getEntityLocation().getX() + 1.0);
System.out.println ("... My simulation just did something...");
System.out.flush();
narrativeMessage1 = "MV3500 ExampleSimulationProgram";
narrativeMessage2 = "runSimulation() loop " + simulationLoopCount;
if (simulationLoopCount > MAX_LOOP_COUNT)
{
simulationComplete = true;
}
Thread.sleep((long)(getSimulationTimeStepDuration() * 1000));
System.out.println ("... [Pausing for " + getSimulationTimeStepDuration() + " seconds]");
sendAllPdusForLoopTimestep(simulationTimeSeconds,
entityStatePdu_1,
firePdu_1a,
DisChannel.COMMENTPDU_APPLICATION_STATUS,
narrativeMessage1, narrativeMessage2);
disChannel.sendSinglePdu(simulationTimeSeconds, entityStatePdu_2);
System.out.println ("... [PDUs of interest successfully sent for this loop]");
System.out.flush();
if (simulationComplete || (simulationLoopCount > 10000))
{
System.out.println ("... [loop termination condition met, simulationComplete=" + simulationComplete + "]");
System.out.flush();
break;
}
simulationTimeSeconds += getSimulationTimeStepDuration();
}
narrativeMessage2 = "runSimulation() completed successfully";
disChannel.sendCommentPdu(DisChannel.COMMENTPDU_NARRATIVE, narrativeMessage1, narrativeMessage2, narrativeMessage3);
System.out.println ("... [final=completion CommentPdu successfully sent for simulation]");
disChannel.leave();
}
catch (InterruptedException iex)
{
Logger.getLogger(ExampleSimulationProgram.class.getSimpleName()).log(Level.SEVERE, null, iex);
}
}
/**
* Send EntityState, Fire, Comment PDUs for this loop.
* @param simTimeSeconds simulation time in seconds
* @param entityStatePdu the ESPDU to send
* @param firePdu the FirePDU to send
* @param commentType enumeration value describing purpose of the narrative comment PDU
* @param comments String array of narrative comments
*/
public void sendAllPdusForLoopTimestep(double simTimeSeconds,
EntityStatePdu entityStatePdu,
FirePdu firePdu,
VariableRecordType commentType,
String... comments)
{
if (entityStatePdu != null)
disChannel.sendSinglePdu(simTimeSeconds, entityStatePdu);
if (firePdu != null)
disChannel.sendSinglePdu(simTimeSeconds, firePdu);
disChannel.sendCommentPdu(simTimeSeconds, commentType, comments);
}
/**
* Initial execution via main() method: handle args array of command-line initialization (CLI) arguments here
* @param args command-line parameters: network address and port
*/
protected void handleArguments (String[] args)
{
if (args.length == 2)
{
if ((args[0] != null) && !args[0].isEmpty())
thisProgram.disChannel.setNetworkAddress(args[0]);
if ((args[1] != null) && !args[1].isEmpty())
thisProgram.disChannel.setNetworkPort(Integer.parseInt(args[1]));
}
else if (args.length != 0)
{
System.err.println("Usage: " + thisProgram.getClass().getSimpleName() + " [address port]");
System.exit(-1);
}
}
/**
* Get simple descriptor for this network interface, used in trace statements
* @return simple descriptor name
*/
public String getDescriptor() {
return descriptor;
}
/**
* Set new simple descriptor for this network interface, used in trace statements
* @param newDescriptor simple descriptor name for this interface
*/
public void setDescriptor(String newDescriptor) {
if (newDescriptor == null)
newDescriptor = "";
this.descriptor = newDescriptor;
}
/**
* parameter accessor method
* @return the simulationTimeStepDuration in seconds
*/
public double getSimulationTimeStepDuration() {
return simulationTimeStepDuration;
}
/**
* parameter accessor method
* @param timeStepDurationSeconds the simulationTimeStepDuration in seconds to set
*/
public void setSimulationTimeStepDuration(double timeStepDurationSeconds) {
this.simulationTimeStepDuration = timeStepDurationSeconds;
}
/** Locally instantiable copy of program, can be subclassed. */
protected static ExampleSimulationProgram thisProgram;
/**
* Main method is first executed when a program instance is loaded.
* @param args command-line parameters: network address and port.
*/
public static void main(String[] args)
{
thisProgram = new ExampleSimulationProgram("test constructor");
thisProgram.disChannel.printlnTRACE("main() started...");
thisProgram.handleArguments(args);
thisProgram.runSimulationLoops();
thisProgram.disChannel.tearDownNetworkInterface();
thisProgram.disChannel.printlnTRACE("complete.");
System.exit(0);
}
}
\ No newline at end of file
For Homework 3, I modified the OpenDIS ExampleSimulationProgram to enhance its functionality
by experimenting with entity enumeration values and adjusting the network communication setup.
Specifically, I changed the entities in the simulation to a Swedish Poseidon-class surface vessel
(Entity 1) and a Triton-class surface vessel (Entity 2) from the dis entities list.
I assigned Entity 1 to the friendly force and Entity 2 to the enemy force to simulate an adversarial scenario,
and I configured a FirePDU for Entity 1 with custom munition settings. On the networking side, I configured the
program to use UDP multicast for distribution of the PDUs across
multiple participants in a simulation environment. This choice was driven by the need for
low-latency communication in large-scale simulations, where UDP's minimal overhead is
advantageous, and multicast ensures that updates reach all participants simultaneously. I also
enabled verbose logging to facilitate debugging. Additionally, I adjusted
the simulation loop to increment Entity 1’s position in each iteration, simulating movement, and set
the loop to run for a maximum of 10 iterations, with the ability to terminate early if certain
conditions are met. In my opinion, these changes improve the program’s ability to simulate realistic
scenarios while maintaining efficient and responsive network communication.
\ No newline at end of file
/**
* Final project assignments supporting the NPS MOVES MV3500 Networked Graphics course.
*
* @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments" target="_blank">networkedGraphicsMV3500 assignments</a>
* @see java.lang.Package
* @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful" target="_blank">StackOverflow: why-is-package-info-java-useful</a>
* @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java" target="_blank">StackOverflow: how-do-i-document-packages-in-java</a>
*/
package MV3500Cohort2024JulySeptember.homework3.Williams;
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<!-- <!--
Copyright (c) 1995-2023 held by the author(s). All rights reserved. Copyright (c) 1995-2023 held by the author(s). All rights reserved.
Redistribution and use in source and binary forms, with or without Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions modification, are permitted provided that the following conditions
are met: are met:
* Redistributions of source code must retain the above copyright * Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer. notice, this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright * Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer notice, this list of conditions and the following disclaimer
in the documentation and/or other materials provided with the in the documentation and/or other materials provided with the
distribution. distribution.
* Neither the names of the Naval Postgraduate School (NPS) * Neither the names of the Naval Postgraduate School (NPS)
Modeling Virtual Environments and Simulation (MOVES) Institute Modeling Virtual Environments and Simulation (MOVES) Institute
(https://www.nps.edu and https://www.MovesInstitute.org) (https://www.nps.edu and https://www.MovesInstitute.org)
nor the names of its contributors may be used to endorse or nor the names of its contributors may be used to endorse or
promote products derived from this software without specific promote products derived from this software without specific
prior written permission. prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE. POSSIBILITY OF SUCH DAMAGE.
--> -->
<!-- <!--
Document : build.xml Document : build.xml
Created on : 1 November 2017 Created on : 1 November 2017
Author : Don Brutzman and Don McGregor Author : Don Brutzman and Don McGregor
Description: Ant build.xml file for Networked Graphics MV3500 Description: Ant build.xml file for Networked Graphics MV3500
--> -->
<project name="MV3500 Networked Graphics" default="all" basedir="."> <project name="MV3500 Networked Graphics" default="all" basedir=".">
<description>Build targets for NPS Networked Graphics MV3500</description> <description>Build targets for NPS Networked Graphics MV3500</description>
<!-- TODO add targets for project maintenance, testing and deployment <!-- TODO add targets for project maintenance, testing and deployment
<property name="specificationsDirectory" location="specifications"/> <property name="specificationsDirectory" location="specifications"/>
<import file="specifications/build.xml"/> --> <import file="specifications/build.xml"/> -->
<property file="build.properties"/> <property file="build.properties"/>
<target name="versions" description="show tool versions and environment values"> <target name="versions" description="show tool versions and environment values">
<echo>ant -version</echo> <echo>ant -version</echo>
<exec executable="ant" dir="." vmlauncher="false"> <exec executable="ant" dir="." vmlauncher="false">
<arg value="-version"/> <arg value="-version"/>
</exec> </exec>
<echo>java -version</echo> <echo>java -version</echo>
<exec executable="java" dir="." vmlauncher="false"> <exec executable="java" dir="." vmlauncher="false">
<arg value="-version"/> <arg value="-version"/>
</exec> </exec>
<echo></echo> <echo></echo>
<!-- Ant environment variables https://ant.apache.org/manual/Tasks/property.html --> <!-- Ant environment variables https://ant.apache.org/manual/Tasks/property.html -->
<echo> ANT_HOME=${env.ANT_HOME}</echo> <echo> ANT_HOME=${env.ANT_HOME}</echo>
<echo> JAVA_HOME=${env.JAVA_HOME}</echo> <echo> JAVA_HOME=${env.JAVA_HOME}</echo>
<echo>CLASSPATH=${env.CLASSPATH}</echo> <echo>CLASSPATH=${env.CLASSPATH}</echo>
<!--<echo>USER =${env.USER}</echo> --> <!--<echo>USER =${env.USER}</echo> -->
<!-- https://stackoverflow.com/questions/949678/ant-is-using-wrong-java-version --> <!-- https://stackoverflow.com/questions/949678/ant-is-using-wrong-java-version -->
<!--echo>javac source/target $java.source=${java.source}</ --> <!--echo>javac source/target $java.source=${java.source}</ -->
<echo>Java/JVM version $ant.java.version=${ant.java.version}</echo> <echo>Java/JVM version $ant.java.version=${ant.java.version}</echo>
<echo>Java/JVM detail version $java.version=${java.version}</echo> <echo>Java/JVM detail version $java.version=${java.version}</echo>
<echo>Ant version $ant.version=${ant.version}</echo> <echo>Ant version $ant.version=${ant.version}</echo>
<echo>Configuration settings: https://savage.nps.edu/Savage/developers.html</echo> <echo>Configuration settings: https://savage.nps.edu/Savage/developers.html</echo>
<!-- TODO Netbeans version --> <!-- TODO Netbeans version -->
<!-- TODO Netbeans project version --> <!-- TODO Netbeans project version -->
<!-- DEBUG: to show all environment and local properties, add <!-- DEBUG: to show all environment and local properties, add
<echoproperties/> --> <echoproperties/> -->
<echo message="==========================================="/> <echo message="==========================================="/>
</target> </target>
<target name="all" depends="versions"> <target name="all" depends="versions">
<ant dir="examples" target="clean"/> <ant dir="examples" target="clean"/>
<ant dir="examples" target="jar"/> <ant dir="examples" target="jar"/>
<ant dir="assignments" target="clean"/> <ant dir="assignments" target="clean"/>
<ant dir="assignments" target="jar"/> <ant dir="assignments" target="jar"/>
<antcall target="javadoc.all"/> <antcall target="javadoc.all"/>
</target> </target>
<target name="clean.all.pduLogs" description="clean autogenerated PDU capture logs"> <target name="clean.all.pduLogs" description="clean autogenerated PDU capture logs">
<ant dir="assignments" target="clean.all.pduLogs"/> <ant dir="assignments" target="clean.all.pduLogs"/>
<ant dir="examples" target="clean.all.pduLogs"/> <ant dir="examples" target="clean.all.pduLogs"/>
</target> </target>
<target name="javadoc.all"> <target name="javadoc.custom.all">
<ant dir="assignments" target="javadoc.custom" useNativeBaseDir="true"/> <ant dir="assignments" target="javadoc.custom" useNativeBaseDir="true"/>
<ant dir="examples" target="javadoc.custom" useNativeBaseDir="true"/> <ant dir="examples" target="javadoc.custom" useNativeBaseDir="true"/>
</target> </target>
<target name="view.gitlab.nps.edu.MV3500" description="view MV3500 gitlab site in web browser (via Netbeans only)"> <target name="view.gitlab.nps.edu.MV3500" description="view MV3500 gitlab site in web browser (via Netbeans only)">
<echo message="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500"/> <echo message="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500"/>
<nbbrowse url="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500"/> <nbbrowse url="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500"/>
<!-- TODO implementation-independent approach if possible. other Ant approaches have to be customized for each OS --> <!-- TODO implementation-independent approach if possible. other Ant approaches have to be customized for each OS -->
</target> </target>
<target name="view.gitlab.nps.edu.MV3500.assignments" description="view MV3500 gitlab examples in web browser (via Netbeans only)"> <target name="view.gitlab.nps.edu.MV3500.assignments" description="view MV3500 gitlab examples in web browser (via Netbeans only)">
<echo message="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/tree/master/assignments"/> <echo message="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/tree/master/assignments"/>
<nbbrowse url="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/tree/master/assignments"/> <nbbrowse url="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/tree/master/assignments"/>
</target> </target>
<target name="view.gitlab.nps.edu.MV3500.examples" description="view MV3500 gitlab examples in web browser (via Netbeans only)"> <target name="view.gitlab.nps.edu.MV3500.examples" description="view MV3500 gitlab examples in web browser (via Netbeans only)">
<echo message="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/tree/master/examples"/> <echo message="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/tree/master/examples"/>
<nbbrowse url="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/tree/master/examples"/> <nbbrowse url="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/tree/master/examples"/>
<!-- TODO implementation-independent approach if possible. other Ant approaches have to be customized for each OS --> <!-- TODO implementation-independent approach if possible. other Ant approaches have to be customized for each OS -->
</target> </target>
<target name="view.gitlab.nps.edu.MV3500.issues" description="view online issues in web browser (Netbeans only)"> <target name="view.gitlab.nps.edu.MV3500.issues" description="view online issues in web browser (Netbeans only)">
<echo message="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/issues" /> <echo message="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/issues" />
<nbbrowse url="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/issues" /> <nbbrowse url="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/issues" />
<!-- TODO implementation-independent approach if possible, but note that other Ant approaches usually have to be customized for each OS. --> <!-- TODO implementation-independent approach if possible, but note that other Ant approaches usually have to be customized for each OS. -->
<echo message="... for issue visibility, be sure to login" /> <echo message="... for issue visibility, be sure to login" />
</target> </target>
<target name="view.gitlab.nps.edu.MV3500.specifications.README" description="view MV3500 gitlab examples in web browser (via Netbeans only)"> <target name="view.gitlab.nps.edu.MV3500.specifications.README" description="view MV3500 gitlab examples in web browser (via Netbeans only)">
<echo message="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/tree/master/specifications/README.md"/> <echo message="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/tree/master/specifications/README.md"/>
<nbbrowse url="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/tree/master/specifications/README.md"/> <nbbrowse url="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/tree/master/specifications/README.md"/>
</target> </target>
<target name="view.open-dis.github.com" description="view github open-dis site in web browser (via Netbeans only)"> <target name="view.open-dis.github.com" description="view github open-dis site in web browser (via Netbeans only)">
<echo message="https://github.com/open-dis"/> <echo message="https://github.com/open-dis"/>
<nbbrowse url="https://github.com/open-dis"/> <nbbrowse url="https://github.com/open-dis"/>
</target> </target>
<target name="view.open-dis.github.com.opendis7-java" description="view github open-dis open-dis-java current build in web browser (via Netbeans only)"> <target name="view.open-dis.github.com.opendis7-java" description="view github open-dis open-dis-java current build in web browser (via Netbeans only)">
<echo message="https://github.com/open-dis/opendis7-java"/> <echo message="https://github.com/open-dis/opendis7-java"/>
<nbbrowse url="https://github.com/open-dis/opendis7-java"/> <nbbrowse url="https://github.com/open-dis/opendis7-java"/>
</target> </target>
<target name="view.open-dis.github.com.opendis7-source-generator" description="view github open-dis opendis7-source-generator project in web browser (via Netbeans only)"> <target name="view.open-dis.github.com.opendis7-source-generator" description="view github open-dis opendis7-source-generator project in web browser (via Netbeans only)">
<echo message="https://github.com/open-dis"/> <echo message="https://github.com/open-dis"/>
<nbbrowse url="https://github.com/open-dis"/> <nbbrowse url="https://github.com/open-dis"/>
</target> </target>
<target name="update.opendis7.jar.from.local" description="update opendis7-java jar files from locally built project into lib directory"> <target name="update.opendis7.jar.from.local" description="update opendis7-java jar files from locally built project into lib directory">
<property name="opendis7-java.relative" value="../../x3d-github/opendis7-java/dist"/> <property name="opendis7-java.relative" value="../../x3d-github/opendis7-java/dist"/>
<echo message="Copy ${opendis7-java.relative}/opendis7-full.jar to project lib/ subdirectory..."/> <echo message="Copy ${opendis7-java.relative}/opendis7-full.jar to project lib/ subdirectory..."/>
<!-- https://ant.apache.org/manual/Tasks/fail.html --> <!-- https://ant.apache.org/manual/Tasks/fail.html -->
<fail message="opendis7-full.jar not found"> <fail message="opendis7-full.jar not found">
<condition> <condition>
<not> <not>
<resourcecount count="1"> <resourcecount count="1">
<fileset id="fs" dir="${opendis7-java.relative}" includes="opendis7-full.jar"/><!-- comma separated --> <fileset id="fs" dir="${opendis7-java.relative}" includes="opendis7-full.jar"/><!-- comma separated -->
</resourcecount> </resourcecount>
</not> </not>
</condition> </condition>
</fail> </fail>
<!-- clean out prior versions --> <!-- clean out prior versions -->
<delete file="lib/opendis7-pdus-classes.jar" verbose="false" failonerror="false"/> <delete file="lib/opendis7-pdus-classes.jar" verbose="false" failonerror="false"/>
<delete file="lib/opendis7-pdus-javadoc.jar" verbose="false" failonerror="false"/> <delete file="lib/opendis7-pdus-javadoc.jar" verbose="false" failonerror="false"/>
<delete file="lib/opendis7-pdus-source.jar" verbose="false" failonerror="false"/> <delete file="lib/opendis7-pdus-source.jar" verbose="false" failonerror="false"/>
<delete file="lib/opendis7-enumerations-classes.jar" verbose="false" failonerror="false"/> <delete file="lib/opendis7-enumerations-classes.jar" verbose="false" failonerror="false"/>
<delete file="lib/opendis7-enumerations-javadoc.jar" verbose="false" failonerror="false"/> <delete file="lib/opendis7-enumerations-javadoc.jar" verbose="false" failonerror="false"/>
<delete file="lib/opendis7-enumerations-source.jar" verbose="false" failonerror="false"/> <delete file="lib/opendis7-enumerations-source.jar" verbose="false" failonerror="false"/>
<!-- replace latest version --> <!-- replace latest version -->
<delete file="lib/opendis7-full.jar" verbose="true" failonerror="false"/> <delete file="lib/opendis7-full.jar" verbose="true" failonerror="false"/>
<copy file="${opendis7-java.relative}/opendis7-full.jar" todir="lib" force="true" verbose="true" failonerror="true"/> <copy file="${opendis7-java.relative}/opendis7-full.jar" todir="lib" force="true" verbose="true" failonerror="true"/>
<!-- <!--
<delete file="assignments/dist/lib/opendis7-full.jar" verbose="true" failonerror="false"/> <delete file="assignments/dist/lib/opendis7-full.jar" verbose="true" failonerror="false"/>
<delete file="examples/dist/lib/opendis7-full.jar" verbose="true" failonerror="false"/> <delete file="examples/dist/lib/opendis7-full.jar" verbose="true" failonerror="false"/>
<copy file="${opendis7-java.relative}/opendis7-full.jar" todir="assignments/dist/lib" force="true" verbose="true" failonerror="true"/> <copy file="${opendis7-java.relative}/opendis7-full.jar" todir="assignments/dist/lib" force="true" verbose="true" failonerror="true"/>
<copy file="${opendis7-java.relative}/opendis7-full.jar" todir="examples/dist/lib" force="true" verbose="true" failonerror="true"/> <copy file="${opendis7-java.relative}/opendis7-full.jar" todir="examples/dist/lib" force="true" verbose="true" failonerror="true"/>
<copy file="${opendis7-java.relative}/opendis7-enumerations-classes.jar" todir="lib" force="true" verbose="true" failonerror="true"/> <copy file="${opendis7-java.relative}/opendis7-enumerations-classes.jar" todir="lib" force="true" verbose="true" failonerror="true"/>
<copy file="${opendis7-java.relative}/opendis7-enumerations-source.jar" todir="lib" force="true" verbose="true" failonerror="true"/> <copy file="${opendis7-java.relative}/opendis7-enumerations-source.jar" todir="lib" force="true" verbose="true" failonerror="true"/>
<copy file="${opendis7-java.relative}/opendis7-enumerations-javadoc.jar" todir="lib" force="true" verbose="true" failonerror="true"/> <copy file="${opendis7-java.relative}/opendis7-enumerations-javadoc.jar" todir="lib" force="true" verbose="true" failonerror="true"/>
<fail message="opendis7-pdus-classes.jar not found"> <fail message="opendis7-pdus-classes.jar not found">
<condition> <condition>
<not> <not>
<resourcecount count="1"> <resourcecount count="1">
<fileset id="fs" dir="${opendis7-java.relative}" includes="opendis7-pdus-classes.jar"/> <fileset id="fs" dir="${opendis7-java.relative}" includes="opendis7-pdus-classes.jar"/>
</resourcecount> </resourcecount>
</not> </not>
</condition> </condition>
</fail> </fail>
<copy file="${opendis7-java.relative}/opendis7-pdus-classes.jar" todir="lib" force="true" verbose="true" failonerror="true"/> <copy file="${opendis7-java.relative}/opendis7-pdus-classes.jar" todir="lib" force="true" verbose="true" failonerror="true"/>
<copy file="${opendis7-java.relative}/opendis7-pdus-javadoc.jar" todir="lib" force="true" verbose="true" failonerror="true"/> <copy file="${opendis7-java.relative}/opendis7-pdus-javadoc.jar" todir="lib" force="true" verbose="true" failonerror="true"/>
<copy file="${opendis7-java.relative}/opendis7-pdus-source.jar" todir="lib" force="true" verbose="true" failonerror="true"/> <copy file="${opendis7-java.relative}/opendis7-pdus-source.jar" todir="lib" force="true" verbose="true" failonerror="true"/>
--> -->
<!-- <delete file="lib/opendis7-classes.jar" verbose="true" failonerror="false"/> prior name --> <!-- <delete file="lib/opendis7-classes.jar" verbose="true" failonerror="false"/> prior name -->
<!-- <delete file="lib/opendis7-javadoc.jar" verbose="true" failonerror="false"/> prior name --> <!-- <delete file="lib/opendis7-javadoc.jar" verbose="true" failonerror="false"/> prior name -->
<!-- <delete file="lib/opendis7-source.jar" verbose="true" failonerror="false"/> prior name --> <!-- <delete file="lib/opendis7-source.jar" verbose="true" failonerror="false"/> prior name -->
</target> </target>
<property name="gitlab.nps.edu.MV3500.lib" value="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/lib"/> <property name="gitlab.nps.edu.MV3500.lib" value="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/lib"/>
<target name="update.opendis7.jar.from.gitlab" description="Update local opendis7 .jar files in project lib directory"> <target name="update.opendis7.jar.from.gitlab" description="Update local opendis7 .jar files in project lib directory">
<echo message="Update local opendis7 .jar files in project lib directory using"/> <echo message="Update local opendis7 .jar files in project lib directory using"/>
<echo message=" ${gitlab.nps.edu.MV3500.lib}"/> <echo message=" ${gitlab.nps.edu.MV3500.lib}"/>
<nbbrowse url= "${gitlab.nps.edu.MV3500.lib}"/> <nbbrowse url= "${gitlab.nps.edu.MV3500.lib}"/>
<get src="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/raw/master/lib/opendis7-full.jar" <get src="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/raw/master/lib/opendis7-full.jar"
dest="lib" verbose="true" usetimestamp="true"/> dest="lib" verbose="true" usetimestamp="true"/>
<!-- <!--
<get src="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/raw/master/lib/opendis7-pdus-classes.jar" <get src="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/raw/master/lib/opendis7-pdus-classes.jar"
dest="lib" verbose="true" usetimestamp="true"/> dest="lib" verbose="true" usetimestamp="true"/>
<get src="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/raw/master/lib/opendis7-enumerations-classes.jar" <get src="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/raw/master/lib/opendis7-enumerations-classes.jar"
dest="lib" verbose="true" usetimestamp="true"/> dest="lib" verbose="true" usetimestamp="true"/>
<get src="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/raw/master/lib/opendis7-pdus-source.jar" <get src="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/raw/master/lib/opendis7-pdus-source.jar"
dest="lib" verbose="true" usetimestamp="true"/> dest="lib" verbose="true" usetimestamp="true"/>
<get src="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/raw/master/lib/opendis7-enumerations-source.jar" <get src="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/raw/master/lib/opendis7-enumerations-source.jar"
dest="lib" verbose="true" usetimestamp="true"/> dest="lib" verbose="true" usetimestamp="true"/>
<get src="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/raw/master/lib/opendis7-pdus-javadoc.jar" <get src="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/raw/master/lib/opendis7-pdus-javadoc.jar"
dest="lib" verbose="true" usetimestamp="true"/> dest="lib" verbose="true" usetimestamp="true"/>
<get src="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/raw/master/lib/opendis7-enumerations-javadoc.jar" <get src="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/raw/master/lib/opendis7-enumerations-javadoc.jar"
dest="lib" verbose="true" usetimestamp="true"/> dest="lib" verbose="true" usetimestamp="true"/>
--> -->
</target> </target>
<target name="update.opendis7.jar.from.maven" description="update opendis7.jar in project lib directory"> <target name="update.opendis7.jar.from.maven" description="update opendis7.jar in project lib directory">
<echo message="TODO retrieve from Maven published repository once available"/> <echo message="TODO retrieve from Maven published repository once available"/>
</target> </target>
<property name="gitlab.nps.edu.MV3302.lib" value="https://gitlab.nps.edu/abuss/MV3302ClassCode/-/tree/master/lib/Simkit"/> <property name="gitlab.nps.edu.MV3302.lib" value="https://gitlab.nps.edu/abuss/MV3302ClassCode/-/tree/master/lib/Simkit"/>
<target name="update.simkit.jar.from.gitlab" description="Update local opendis7 .jar files in project lib directory"> <target name="update.simkit.jar.from.gitlab" description="Update local opendis7 .jar files in project lib directory">
<echo message="Update local simkit .jar files in project lib directory using"/> <echo message="Update local simkit .jar files in project lib directory using"/>
<echo message="TODO not yet updating correctly..."/> <echo message="TODO not yet updating correctly..."/>
<echo message=" ${gitlab.nps.edu.MV3302.lib}"/> <echo message=" ${gitlab.nps.edu.MV3302.lib}"/>
<nbbrowse url= "${gitlab.nps.edu.MV3302.lib}"/> <nbbrowse url= "${gitlab.nps.edu.MV3302.lib}"/>
<get src="https://gitlab.nps.edu/abuss/MV3302ClassCode/-/raw/master/lib/Simkit/simkit.jar" <get src="https://gitlab.nps.edu/abuss/MV3302ClassCode/-/raw/master/lib/Simkit/simkit.jar"
dest="lib" verbose="true" usetimestamp="true"/> dest="lib" verbose="true" usetimestamp="true"/>
<get src="https://gitlab.nps.edu/abuss/MV3302ClassCode/-/raw/master/lib/Simkit/simkit-src.zip" <get src="https://gitlab.nps.edu/abuss/MV3302ClassCode/-/raw/master/lib/Simkit/simkit-src.zip"
dest="lib" verbose="true" usetimestamp="true"/> dest="lib" verbose="true" usetimestamp="true"/>
<get src="https://gitlab.nps.edu/abuss/MV3302ClassCode/-/raw/master/lib/Simkit/simkit-doc.zip" <get src="https://gitlab.nps.edu/abuss/MV3302ClassCode/-/raw/master/lib/Simkit/simkit-doc.zip"
dest="lib" verbose="true" usetimestamp="true"/> dest="lib" verbose="true" usetimestamp="true"/>
</target> </target>
<!-- Viskit properties --> <!-- Viskit properties -->
<target name="platformInitialize" depends="platformType"/> <target name="platformInitialize" depends="platformType"/>
<target name="platformType"> <target name="platformType">
<condition property="isWin" > <condition property="isWin" >
<os family="windows"/> <os family="windows"/>
</condition> </condition>
<condition property="isMac" > <condition property="isMac" >
<os family="mac"/> <os family="mac"/>
</condition> </condition>
<!-- Based on Apache Ant user-manual example --> <!-- Based on Apache Ant user-manual example -->
<condition property="isUnix"> <condition property="isUnix">
<and> <and>
<os family="unix"/> <os family="unix"/>
<not> <not>
<equals arg1="${os.name}" arg2="Mac OS X"/> <equals arg1="${os.name}" arg2="Mac OS X"/>
</not> </not>
</and> </and>
</condition> </condition>
</target> </target>
<target name="initWin" if="isWin"> <target name="initWin" if="isWin">
<property name="run.args" value="${win.run.args}"/> <property name="run.args" value="${win.run.args}"/>
</target> </target>
<target name="initUnix" if="isUnix"> <target name="initUnix" if="isUnix">
<property name="run.args" value="${unix.run.args}"/> <property name="run.args" value="${unix.run.args}"/>
</target> </target>
<target name="initMac" if="isMac"> <target name="initMac" if="isMac">
<property name="run.args" value="${mac.run.args}"/> <property name="run.args" value="${mac.run.args}"/>
</target> </target>
<target name="initializeAll" depends="platformInitialize,initWin,initUnix,initMac"/> <target name="initializeAll" depends="platformInitialize,initWin,initUnix,initMac"/>
<target name="set.classpath" depends="initializeAll"> <target name="set.classpath" depends="initializeAll">
<path id="runtime.classpath"> <path id="runtime.classpath">
<fileset dir="${viskit.lib.dir}"> <fileset dir="${viskit.lib.dir}">
<include name="**/*.jar"/> <include name="**/*.jar"/>
</fileset> </fileset>
<pathelement path="${extra.classpath}"/> <pathelement path="${extra.classpath}"/>
</path> </path>
<!--<echo message="runtime.classpath=${toString:runtime.classpath}"/>--> <!--<echo message="runtime.classpath=${toString:runtime.classpath}"/>-->
</target> </target>
<target name="run.viskit" depends="set.classpath" description="Start the Visual Simikit (viskit) DES Authoring Tool on any O/S"> <target name="run.viskit" depends="set.classpath" description="Start the Visual Simikit (viskit) DES Authoring Tool on any O/S">
<splash imageurl="file:${basedir}/${splash.image}" <splash imageurl="file:${basedir}/${splash.image}"
useproxy="true" useproxy="true"
showduration="5000"/> showduration="5000"/>
<java classname="${main.class}" <java classname="${main.class}"
classpathref="runtime.classpath" classpathref="runtime.classpath"
dir="${viskit.dir}" dir="${viskit.dir}"
fork="true"> fork="true">
<jvmarg line="${run.args}"/> <jvmarg line="${run.args}"/>
<arg value="${assy.file}"/> <arg value="${assy.file}"/>
</java> </java>
</target> </target>
<target name="clean.all.viskit.logs" description="clean autogenerated PDU capture and Viskit generated logs"> <target name="clean.all.viskit.logs" description="clean autogenerated PDU capture and Viskit generated logs">
<delete dir="${viskit.dir}/logs"/> <delete dir="${viskit.dir}/logs"/>
<delete dir="${viskit.dir}/pduLog"/> <delete dir="${viskit.dir}/pduLog"/>
</target> </target>
<target name="reset.viskit.MV3500" description="initialize user preferences for Viskit MV3500"> <target name="reset.viskit.MV3500" description="initialize user preferences for Viskit MV3500">
<echo message="Warning: under development"/> <echo message="Warning: under development"/>
<echo message="Reset MV3500 user's Viskit configuration files in ${dot.viskit.dir}"/> <echo message="Reset MV3500 user's Viskit configuration files in ${dot.viskit.dir}"/>
<delete includeemptydirs="yes" dir="${dot.viskit.dir}"/> <delete includeemptydirs="yes" dir="${dot.viskit.dir}"/>
<!-- repopulute with defaults <!-- repopulute with defaults -->
<mkdir dir="${dot.viskit.dir}"/> --> <mkdir dir="${dot.viskit.dir}"/>
<copy verbose="true" tofile="${dot.viskit.dir}/c_app.xml" file="c_app.ViskitDefaultMV3500.xml"/> <copy verbose="true" tofile="${dot.viskit.dir}/c_app.xml" file="c_app.ViskitDefaultMV3500.xml"/>
<copy todir ="${dot.viskit.dir}" file="${c_gui.xml}"/> <copy todir ="${dot.viskit.dir}" file="${c_gui.xml}"/>
</target> </target>
<target name="reset.viskit.DefaultProject" description="initialize user preferences for Viskit DefaultProject"> <target name="reset.viskit.DefaultViskitProject" description="initialize user preferences for the bundled DefaultViskitProject">
<echo message="Warning: under development"/> <!-- TODO watch for that project to get renamed -->
<echo message="Reset MV3500 user's Viskit configuration files in ${dot.viskit.dir}"/> <echo message="Warning: under development"/>
<delete includeemptydirs="yes" dir="${dot.viskit.dir}"/> <echo message="Reset MV3500 user's Viskit configuration files in ${dot.viskit.dir}"/>
<!-- repopulute with defaults <delete includeemptydirs="yes" dir="${dot.viskit.dir}"/>
<mkdir dir="${dot.viskit.dir}"/> --> <!-- repopulute with defaults -->
<copy verbose="true" tofile="${dot.viskit.dir}/c_app.xml" file="c_app.ViskitDefaultProject.xml"/> <mkdir dir="${dot.viskit.dir}"/>
<copy todir ="${dot.viskit.dir}" file="${c_gui.xml}"/> <copy verbose="true" tofile="${dot.viskit.dir}/c_app.xml" file="c_app.ViskitDefaultProject.xml"/>
</target> <copy todir ="${dot.viskit.dir}" file="${c_gui.xml}"/>
</target>
<target name="reset.viskit" description="clear an out of synch configuration and metadata directory - only when necessary">
<echo message="Reset user's Viskit configuration files in ${dot.viskit.dir}"/> <target name="reset.viskit" description="clear an out of synch configuration and metadata directory - only when necessary">
<delete includeemptydirs="yes" dir="${dot.viskit.dir}"/> <echo message="Reset user's Viskit configuration files in ${dot.viskit.dir}"/>
<!-- repopulute with defaults <delete includeemptydirs="yes" dir="${dot.viskit.dir}"/>
<mkdir dir="${dot.viskit.dir}"/> --> <mkdir dir="${dot.viskit.dir}"/>
<copy todir="${dot.viskit.dir}" file="${c_app.xml}"/> <!-- repopulute with defaults -->
<copy todir="${dot.viskit.dir}" file="${c_gui.xml}"/> <!-- ${c_app.xml} and ${c_gui.xml} are properties in the build.properties definitions -->
</target> <copy todir="${dot.viskit.dir}" file="${c_app.xml}" verbose="true"/>
<copy todir="${dot.viskit.dir}" file="${c_gui.xml}" verbose="true"/>
</target>
</project> </project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<!-- Viskit application configuration file c_app.xml --> <!-- Viskit application configuration file c_app.xml -->
<!-- Programming note: values in this file are retrieved by keys such as 'app.beanshell.warning' --> <!-- Programming note: values in this file are retrieved by keys such as 'app.beanshell.warning' -->
<!-- Programming note: the root element name is ignored when assembling keys --> <!-- Programming note: the root element name is ignored when assembling keys -->
<ViskitConfig> <ViskitConfig>
<app> <app>
<beanshell> <beanshell>
<warning>true</warning> <warning>true</warning>
</beanshell> </beanshell>
<mainframe> <mainframe>
<size h="680" w="930" /> <size h="680" w="930" />
</mainframe> </mainframe>
<projecthome> <projecthome>
<!-- These two attributes MUST always be at least zero-length Strings --> <!-- These two attributes MUST always be at least zero-length Strings -->
<!-- DefaultProject is included in this template for convenience <!-- DefaultProject is included in this template for convenience -->
<path dir= "./viskit/MyViskitProjects" />--> <path dir="../examples/src"/>
<path dir="C:/x3d-nps-gitlab/NetworkedGraphicsMV3500/examples/src" /> <name value="ViskitOpenDis7Examples"/>
<name value="ViskitOpenDis7Examples" /> </projecthome>
</projecthome> <tabs>
<tabs> <EventGraphEditor visible="true" />
<EventGraphEditor visible="true" /> <AssemblyEditor visible="true" />
<AssemblyEditor visible="true" /> <AssemblyRun visible="true" />
<AssemblyRun visible="true" /> <DesignOfExperiments visible="false" />
<DesignOfExperiments visible="false" /> <ClusterRun visible="false" />
<ClusterRun visible="false" /> <AnalystReport visible="false" />
<AnalystReport visible="false" /> </tabs>
</tabs> <debug>false</debug>
<debug>false</debug> </app>
</app> <history>
<history> <ProjectEditor>
<ProjectEditor> <Recent>
<Recent> <!-- MV3500 includes the following two projects -->
<!-- <Project value="../viskit/MyViskitProjects/DefaultProject" />
<Project value="./examples/src/ViskitOpenDis7Examples" /> <Project value="../examples/src/ViskitOpenDis7Examples"/>
<Project value="./viskit/MyViskitProjects/DefaultProject" /> </Recent>
--> </ProjectEditor>
<Project value="C:/x3d-nps-gitlab/NetworkedGraphicsMV3500/viskit/MyViskitProjects/DefaultProject" /> <Cluster>
<Project value="C:/x3d-nps-gitlab/NetworkedGraphicsMV3500/examples/src/ViskitOpenDis7Examples"/> <Account last="true" password="" port="4444" server="wipeout.hpr.nps.edu" username="" />
</Recent> </Cluster>
</ProjectEditor> <AssemblyEditor>
<Cluster> <Recent>
<Account last="true" password="" port="4444" server="wipeout.hpr.nps.edu" username="" /> <AssemblyFile value="../examples/src/ViskitOpenDis7Examples/Assemblies/dis7/ArrivalProcessOpenDis7Assembly.xml"/>
</Cluster> <AssemblyFile value="../examples/src/ViskitOpenDis7Examples/Assemblies/dis7/SimpleServerDis7Assembly.xml"/>
<AssemblyEditor> </Recent>
<Recent> </AssemblyEditor>
<AssemblyFile value="C:/x3d-nps-gitlab/NetworkedGraphicsMV3500/examples/src/ViskitOpenDis7Examples/Assemblies/dis7/ArrivalProcessOpenDis7Assembly.xml"/> <EventGraphEditor>
<AssemblyFile value="C:/x3d-nps-gitlab/NetworkedGraphicsMV3500/examples/src/ViskitOpenDis7Examples/Assemblies/dis7/SimpleServerDis7Assembly.xml"/> <Recent>
</Recent> <EventGraphFile value="../examples/src/ViskitOpenDis7Examples/EventGraphs/dis7/ArrivalProcessOpenDis7.xml"/>
</AssemblyEditor> </Recent>
<EventGraphEditor> </EventGraphEditor>
<Recent> </history>
<EventGraphFile value="C:/x3d-nps-gitlab/NetworkedGraphicsMV3500/examples/src/ViskitOpenDis7Examples/EventGraphs/dis7/ArrivalProcessOpenDis7.xml"/> </ViskitConfig>
</Recent>
</EventGraphEditor>
</history>
</ViskitConfig>
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<!-- Viskit application configuration file c_app.xml --> <!-- Viskit application configuration file c_app.xml -->
<!-- Programming note: values in this file are retrieved by keys such as 'app.beanshell.warning' --> <!-- Programming note: values in this file are retrieved by keys such as 'app.beanshell.warning' -->
<!-- Programming note: the root element name is ignored when assembling keys --> <!-- Programming note: the root element name is ignored when assembling keys -->
<ViskitConfig> <ViskitConfig>
<app> <app>
<beanshell> <beanshell>
<warning>true</warning> <warning>true</warning>
</beanshell> </beanshell>
<mainframe> <mainframe>
<size h="680" w="930" /> <size h="680" w="930" />
</mainframe> </mainframe>
<projecthome> <projecthome>
<!-- These two attributes MUST always be at least zero-length Strings --> <!-- These two attributes MUST always be at least zero-length Strings -->
<!-- DefaultProject is included in this template for convenience <!-- DefaultProject is included in this template for convenience -->
<path dir= "./viskit/MyViskitProjects" />--> <!-- TODO keep an eye out for possible rename, e.g. DefaultViskitProject -->
<path dir="C:/x3d-nps-gitlab/NetworkedGraphicsMV3500/viskit/MyViskitProjects" /> <path dir="./MyViskitProjects" />
<name value="DefaultProject" /> <name value="DefaultProject" />
</projecthome> </projecthome>
<tabs> <tabs>
<EventGraphEditor visible="true" /> <EventGraphEditor visible="true" />
<AssemblyEditor visible="true" /> <AssemblyEditor visible="true" />
<AssemblyRun visible="true" /> <AssemblyRun visible="true" />
<DesignOfExperiments visible="false" /> <DesignOfExperiments visible="false" />
<ClusterRun visible="false" /> <ClusterRun visible="false" />
<AnalystReport visible="false" /> <AnalystReport visible="false" />
</tabs> </tabs>
<debug>false</debug> <debug>false</debug>
</app> </app>
<history> <history>
<ProjectEditor> <ProjectEditor>
<Recent> <Recent>
<!-- <!-- MV3500 includes the following two projects -->
<Project value="./examples/src/ViskitOpenDis7Examples" /> <Project value="./MyViskitProjects/DefaultProject" />
<Project value="./viskit/MyViskitProjects/DefaultProject" /> <Project value="../examples/src/ViskitOpenDis7Examples"/>
<Project value="C:/x3d-nps-gitlab/NetworkedGraphicsMV3500/viskit/MyViskitProjects/DefaultProject" /> </Recent>
--> </ProjectEditor>
<Project value="C:/x3d-nps-gitlab/NetworkedGraphicsMV3500/viskit/MyViskitProjects/DefaultProject" /> <Cluster>
<Project value="C:/x3d-nps-gitlab/NetworkedGraphicsMV3500/examples/src/ViskitOpenDis7Examples"/> <Account last="true" password="" port="4444" server="wipeout.hpr.nps.edu" username="" />
</Recent> </Cluster>
</ProjectEditor> <AssemblyEditor>
<Cluster> <Recent>
<Account last="true" password="" port="4444" server="wipeout.hpr.nps.edu" username="" /> <AssemblyFile value="./MyViskitProjects/DefaultProject/Assemblies/examples/ArrayTesterAssembly.xml" />
</Cluster> <AssemblyFile value="./MyViskitProjects/DefaultProject/Assemblies/examples/InventoryModelAssembly.xml" />
<AssemblyEditor> <AssemblyFile value="./MyViskitProjects/DefaultProject/Assemblies/examples/ServerAssembly3.xml" />
<Recent> <AssemblyFile value="./MyViskitProjects/DefaultProject/Assemblies/examples/ServerWithRenegesAssembly.xml" />
<AssemblyFile value="C:/x3d-nps-gitlab/NetworkedGraphicsMV3500/viskit/MyViskitProjects/DefaultProject/Assemblies/examples/ArrayTesterAssembly.xml" /> <AssemblyFile value="./MyViskitProjects/DefaultProject/Assemblies/examples/TestServerGenericAssembly.xml" />
<AssemblyFile value="C:/x3d-nps-gitlab/NetworkedGraphicsMV3500/viskit/MyViskitProjects/DefaultProject/Assemblies/examples/InventoryModelAssembly.xml" /> </Recent>
<AssemblyFile value="C:/x3d-nps-gitlab/NetworkedGraphicsMV3500/viskit/MyViskitProjects/DefaultProject/Assemblies/examples/ServerAssembly3.xml" /> </AssemblyEditor>
<AssemblyFile value="C:/x3d-nps-gitlab/NetworkedGraphicsMV3500/viskit/MyViskitProjects/DefaultProject/Assemblies/examples/ServerWithRenegesAssembly.xml" /> <EventGraphEditor>
<AssemblyFile value="C:/x3d-nps-gitlab/NetworkedGraphicsMV3500/viskit/MyViskitProjects/DefaultProject/Assemblies/examples/TestServerGenericAssembly.xml" /> <Recent>
</Recent> <EventGraphFile value="./MyViskitProjects/DefaultProject/EventGraphs/examples/ArrayTester.xml" />
</AssemblyEditor> <EventGraphFile value="./MyViskitProjects/DefaultProject/EventGraphs/examples/ArrivalProcess.xml" />
<EventGraphEditor> <EventGraphFile value="./MyViskitProjects/DefaultProject/EventGraphs/examples/InventoryModel.xml" />
<Recent> <EventGraphFile value="./MyViskitProjects/DefaultProject/EventGraphs/examples/SimpleServer.xml" />
<EventGraphFile value="C:/x3d-nps-gitlab/NetworkedGraphicsMV3500/viskit/MyViskitProjects/DefaultProject/EventGraphs/examples/ArrayTester.xml" /> <EventGraphFile value="./MyViskitProjects/DefaultProject/EventGraphs/examples/Creator.xml" />
<EventGraphFile value="C:/x3d-nps-gitlab/NetworkedGraphicsMV3500/viskit/MyViskitProjects/DefaultProject/EventGraphs/examples/ArrivalProcess.xml" /> <EventGraphFile value="./MyViskitProjects/DefaultProject/EventGraphs/examples/ServerWithReneges.xml" />
<EventGraphFile value="C:/x3d-nps-gitlab/NetworkedGraphicsMV3500/viskit/MyViskitProjects/DefaultProject/EventGraphs/examples/InventoryModel.xml" /> <EventGraphFile value="./MyViskitProjects/DefaultProject/EventGraphs/examples/EntityCreator.xml" />
<EventGraphFile value="C:/x3d-nps-gitlab/NetworkedGraphicsMV3500/viskit/MyViskitProjects/DefaultProject/EventGraphs/examples/SimpleServer.xml" /> <EventGraphFile value="./MyViskitProjects/DefaultProject/EventGraphs/examples/ServerGeneric.xml" />
<EventGraphFile value="C:/x3d-nps-gitlab/NetworkedGraphicsMV3500/viskit/MyViskitProjects/DefaultProject/EventGraphs/examples/Creator.xml" /> </Recent>
<EventGraphFile value="C:/x3d-nps-gitlab/NetworkedGraphicsMV3500/viskit/MyViskitProjects/DefaultProject/EventGraphs/examples/ServerWithReneges.xml" /> </EventGraphEditor>
<EventGraphFile value="C:/x3d-nps-gitlab/NetworkedGraphicsMV3500/viskit/MyViskitProjects/DefaultProject/EventGraphs/examples/EntityCreator.xml" /> </history>
<EventGraphFile value="C:/x3d-nps-gitlab/NetworkedGraphicsMV3500/viskit/MyViskitProjects/DefaultProject/EventGraphs/examples/ServerGeneric.xml" /> </ViskitConfig>
</Recent>
</EventGraphEditor>
</history>
</ViskitConfig>
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