diff --git a/.gitignore b/.gitignore index c12f10b6cd50dbf0055df9b7cb1f35f8f9433ddb..c21a65c663dea74d5b800779817b4d1af65bcf39 100644 --- a/.gitignore +++ b/.gitignore @@ -40,6 +40,7 @@ /examples/DisDemo/nbproject/private/ /examples/DisDemo/build/ /examples/DisDemo/dist/ +/examples/pduLog/PduCaptureLog*.dislog /specifications/downloads/IEEE1278.2-2015.DistributedInteractiveSimulation.CommunicationsServices.12782-2015.pdf /specifications/downloads/IEEE1278.3-2015.DistributedInteractiveSimulation.CommunicationsServices.00587529.pdf /specifications/downloads/IEEE1278.4-2013.DistributedInteractiveSimulation.VV+A.12784-1997.pdf diff --git a/assignments/src/MV3500Cohort2021JulySeptember/homework1/McNeelyTCPExample2.java b/assignments/src/MV3500Cohort2021JulySeptember/homework1/McNeelyTCPExample2.java index 3ac41ef7ab069ac08cf204be58f669005a4cf497..3f56434d00c2c1fd5b344f3d5878e0b82ea4f6e8 100644 --- a/assignments/src/MV3500Cohort2021JulySeptember/homework1/McNeelyTCPExample2.java +++ b/assignments/src/MV3500Cohort2021JulySeptember/homework1/McNeelyTCPExample2.java @@ -61,7 +61,7 @@ public class McNeelyTCPExample2 ps.println("This client response was written by server " + McNeelyTCPExample2.class.getName()); // to remote client System.out.println("This server response was written by server " + McNeelyTCPExample2.class.getName()); // to server console - ps.println("You have attempted " + connectionCount + "times, you are now aplicant number " + totalEntrantCount + " to win. Keep trying!"); + ps.println("You have attempted " + connectionCount + " times, you are now aplicant number " + totalEntrantCount + " to win. Keep trying!"); totalEntrantCount = (totalEntrantCount + 24); // Print some information locally about the Socket connection. diff --git a/assignments/src/MV3500Cohort2021JulySeptember/homework1/TcpExample2_Leckie_Mod_Hw1.java b/assignments/src/MV3500Cohort2021JulySeptember/homework1/TcpExample2_Leckie_Mod_Hw1.java index 4b3fba3fae6b9ac02719c8d3073b69917b985def..e48eff8bbdf1745948c63ae3db12cc4cd97a036f 100644 --- a/assignments/src/MV3500Cohort2021JulySeptember/homework1/TcpExample2_Leckie_Mod_Hw1.java +++ b/assignments/src/MV3500Cohort2021JulySeptember/homework1/TcpExample2_Leckie_Mod_Hw1.java @@ -63,7 +63,7 @@ public class TcpExample2_Leckie_Mod_Hw1 ps.println("This client response was written by server " + TcpExample2_Leckie_Mod_Hw1.class.getName()); // to remote client System.out.println("This server response was written by server " + TcpExample2_Leckie_Mod_Hw1.class.getName()); // to server console - ps.println("This is your lottery attempt number #" + connectionCount + ", you are aplicant number " + totalEntrantCount + " to try and win. Keep trying!"); + ps.println("This is your lottery attempt number #" + connectionCount + ", you are applicant number " + totalEntrantCount + " to try and win. Keep trying!"); totalEntrantCount = (totalEntrantCount + 79); // Print some information locally about the Socket connection. diff --git a/assignments/src/MV3500Cohort2021JulySeptember/homework2/AllenTcpExample3Client.java b/assignments/src/MV3500Cohort2021JulySeptember/homework2/AllenTcpExample3Client.java new file mode 100644 index 0000000000000000000000000000000000000000..2184a1be395895c4fc9da11d10e3129698c901b7 --- /dev/null +++ b/assignments/src/MV3500Cohort2021JulySeptember/homework2/AllenTcpExample3Client.java @@ -0,0 +1,94 @@ +package MV3500Cohort2021JulySeptember.homework2; + +import java.io.*; +import java.net.*; + +/** + * Before, we always used telnet (netcat) to connect to the server. Here we are + * now writing our own program to do the connection. + * + * As you will see, when we run this after we start the server we will see the + * same string telnet printed, sent by the server. The output at the server will + * show different socket pairs for each time the loop iterates. + * + * @author snapp + */ +public class AllenTcpExample3Client { + + /** IPv6 String constant for localhost address, similarly IPv4 127.0.0.1 + * @see <a href="https://en.wikipedia.org/wiki/localhost">https://en.wikipedia.org/wiki/localhost</a> + * @see <a href="https://en.wikipedia.org/wiki/IPv6_address">https://en.wikipedia.org/wiki/IPv6_address</a> + */ + public final static String LOCALHOST = "0:0:0:0:0:0:0:1"; + + /** + * Program invocation, execution starts here + * @param args command-line arguments + * @throws java.lang.InterruptedException user cancels execution + */ + public static void main(String[] args) throws InterruptedException { + + // Local variables/fields + Socket socket = null; + InputStream is; + Reader isr; + BufferedReader br; + String serverMessage; + int clientLoopCount = 0; + + try { + while (true) + { + clientLoopCount++; // increment at beginning of loop for reliability + System.out.println(AllenTcpExample3Client.class.getName() + " creating socket..."); + + // We request an IP to connect to ("localhost") and + // port number at that IP (2317). This establishes + // a connection to that IP in the form of a Socket + // object; the server uses a ServerSocket to wait for + // connections. + socket = new Socket(LOCALHOST, 2317); // locohost? + + // Now hook everything up (i.e. set up the streams), Java style: + is = socket.getInputStream(); + isr = new InputStreamReader(is); + br = new BufferedReader(isr); + + // Read a single line written by the server. We'd + // do things a bit differently if there were many lines to be read + // from the server instead of one only. + serverMessage = br.readLine(); + System.out.println("=================================================="); + System.out.println("Sorry, my dog ate my homework."); + System.out.println("The AllenServer responds with: " + serverMessage + "'"); + System.out.println("Yeah, it took him a few bytes! This this my " + clientLoopCount +" time trying to contact you."); + + // socket gets closed, either automatically/silently by this code (or possibly by the server) + + Thread.sleep(500l); // slow things down, for example 500l (long) = 500 msec + + } // end while(true) // infinite loops are dangerous, be sure to kill this process! + } + catch (IOException e) + { + System.err.println("Problem with " + AllenTcpExample3Client.class.getName() + " networking:"); // describe what is happening + System.err.println("Error: " + e); + + // Provide more helpful information to user if exception occurs due to running twice at one time + if (e instanceof java.net.BindException) { + System.err.println("*** Be sure to stop any other running instances of programs using this port!"); + } + } + finally // occurs after any other activity when shutting down + { + try { + if (socket != null) + socket.close(); + } catch (IOException e) {} + + // program exit: tell somebody about that happening. Likely cause: server drops connection. + System.out.println(); + System.out.println(AllenTcpExample3Client.class.getName() + " exit"); + } + } +} diff --git a/assignments/src/MV3500Cohort2021JulySeptember/homework2/FrankClient.java b/assignments/src/MV3500Cohort2021JulySeptember/homework2/FrankClient.java new file mode 100644 index 0000000000000000000000000000000000000000..7a47fc9139e04f668c57b2448f8f907fc511b538 --- /dev/null +++ b/assignments/src/MV3500Cohort2021JulySeptember/homework2/FrankClient.java @@ -0,0 +1,99 @@ +package MV3500Cohort2021JulySeptember.homework2; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.Reader; +import java.net.Socket; + +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +/** + * + * @author justi + */ +public class FrankClient { + + /** + */ + public final static String LOCALHOST = "0:0:0:0:0:0:0:1"; + + /** + * Program invocation, execution starts here + * + * @param args command-line arguments + * @throws java.lang.InterruptedException user cancels execution + */ + public static void main(String[] args) throws InterruptedException { + + // Local variables/fields + Socket socket = null; + InputStream is; + Reader isr; + BufferedReader br; + String serverMessage; + int clientLoopCount = 0; + + try { + while (true) { + clientLoopCount++; // increment at beginning of loop for reliability + System.out.println( "creating socket..."); + + // We request an IP to connect to ("localhost") and + // port number at that IP (2317). This establishes + // a connection to that IP in the form of a Socket + // object; the server uses a ServerSocket to wait for + // connections. + socket = new Socket(LOCALHOST, 2318); // locohost? + + // Now hook everything up (i.e. set up the streams), Java style: + is = socket.getInputStream(); + isr = new InputStreamReader(is); + br = new BufferedReader(isr); + + // Read a single line written by the server. We'd + // do things a bit differently if there were many lines to be read + // from the server instead of one only. + serverMessage = br.readLine(); + System.out.println("*********************************"); + + System.out.print( clientLoopCount + ": "); + System.out.println("Hola!"); + System.out.println("The message the server sent was: '" + serverMessage + "'"); + int count = 0; + System.out.println("test"); + count++; +// socket gets closed, either automatically/silently by this code (or possibly by the server) + if (serverMessage.equals("this is good bye message from Franks server")) { //if client recieved termanation message stop client + break; + } + Thread.sleep(1000); // turned it down to 1 second + + } // end while(true) // infinite loops are dangerous, be sure to kill this process! + } catch (IOException e) { + System.err.println("Problem with " + FrankClient.class.getName() + " networking:"); // describe what is happening + System.err.println("Error: " + e); + + // Provide more helpful information to user if exception occurs due to running twice at one time + if (e instanceof java.net.BindException) { + System.err.println("*** Be sure to stop any other running instances of programs using this port!"); + } + } finally // occurs after any other activity when shutting down + { + try { + if (socket != null) { + socket.close(); + } + } catch (IOException e) { + } + + // program exit: tell somebody about that happening. Likely cause: server drops connection. + System.out.println(); + System.out.println("Good Bye!!!"); + } + } +} diff --git a/assignments/src/MV3500Cohort2021JulySeptember/homework2/HittnerDTcpExampleServer.java b/assignments/src/MV3500Cohort2021JulySeptember/homework2/FrankServer.java similarity index 51% rename from assignments/src/MV3500Cohort2021JulySeptember/homework2/HittnerDTcpExampleServer.java rename to assignments/src/MV3500Cohort2021JulySeptember/homework2/FrankServer.java index becdc6e6bcb0f860115d75705ae11aa512c379a6..aafe9a4a2ee3a0126f26a4f906abf699ea2a5864 100644 --- a/assignments/src/MV3500Cohort2021JulySeptember/homework2/HittnerDTcpExampleServer.java +++ b/assignments/src/MV3500Cohort2021JulySeptember/homework2/FrankServer.java @@ -1,29 +1,28 @@ -package MV3500Cohort2021JulySeptember.homework2.HittnerD; +package MV3500Cohort2021JulySeptember.homework2; import java.io.*; import java.net.*; -/** - * - * @author Dom Hittner - */ -public class HittnerDTcpExampleServer { + +public class FrankServer { /** - * Program invocation, execution starts here - * If already compiled, can run using console in directory ../../build/classes/ by invoking \ - * java -classpath . TcpExamples.TcpExample3Server + * Program invocation, execution starts here If already compiled, can run + * using console in directory ../../build/classes/ by invoking \ java + * -classpath . TcpExamples.TcpExample3Server + * * @param args command-line arguments + * @throws java.lang.InterruptedException user cancels execution */ - public static void main(String[] args) { + public static void main(String[] args) throws InterruptedException { try { - + // ServerSocket waits for a connection from a client. // Notice that it is outside the loop; ServerSocket // needs to be made only once. - System.out.println(HittnerDTcpExampleServer.class.getName() + " has started..."); // it helps debugging to put this on console first - - ServerSocket serverSocket = new ServerSocket(2317); + System.out.println(FrankServer.class.getName() + " has started..."); // it helps debugging to put this on console first + + ServerSocket serverSocket = new ServerSocket(2318); // changed from 2317 to 2318 OutputStream os; PrintStream ps; InetAddress localAddress, remoteAddress; @@ -33,42 +32,45 @@ public class HittnerDTcpExampleServer { // Server is up and waiting (i.e. "blocked" or paused) // Loop, infinitely, waiting for client connections. // Stop the program somewhere else. - while (true) { - + while (true) { + // block until connected to a client - try (Socket clientConnectionSocket = serverSocket.accept()) - { + try ( Socket clientConnectionSocket = serverSocket.accept()) { serverLoopCount++; // increment at beginning of loop for reliability - + // Now hook everything up (i.e. set up the streams), Java style: os = clientConnectionSocket.getOutputStream(); ps = new PrintStream(os); - ps.println("okay " + serverLoopCount + " let's go to Starbucks"); // this gets sent back to client! - + if (serverLoopCount <= 10) { // checking if the loop count <= 10 + ps.println("How are you doing?"); // this gets sent back to client! + } else { + ps.println("this is good bye message from Franks server"); // termination after 20 messages + break; // Stop server + } // Print some information locally about the Socket connection. // This includes the port and IP numbers on both sides (the socket pair). - localAddress = clientConnectionSocket.getLocalAddress(); + localAddress = clientConnectionSocket.getLocalAddress(); remoteAddress = clientConnectionSocket.getInetAddress(); - localPort = clientConnectionSocket.getLocalPort(); - remotePort = clientConnectionSocket.getPort(); - - System.out.print ("Server loop " + serverLoopCount + ": "); - + localPort = clientConnectionSocket.getLocalPort(); + remotePort = clientConnectionSocket.getPort(); + + System.out.print("Server loop " + serverLoopCount + ": "); + // My socket pair connection looks like this, to localhost: // Socket pair: (( /0:0:0:0:0:0:0:1, 2317 ), ( /0:0:0:0:0:0:0:1, 54876 )) // Socket pair: (( /0:0:0:0:0:0:0:1, 2317 ), ( /0:0:0:0:0:0:0:1, 54881 )) - // Why is the first IP/port the same, while the second set has different ports? - System.out.println(HittnerDTcpExampleServer.class.getName() + " socket pair showing host name, address, port:"); - System.out.println(" (( " + - localAddress.getHostName() + "=" + localAddress.getHostAddress() + ", " + localPort + " ), ( " + - remoteAddress.getHostName() + "=" + remoteAddress.getHostAddress() + ", " + remotePort + " ))"); - - if ( localAddress.getHostName().equals( localAddress.getHostAddress()) || - remoteAddress.getHostName().equals(remoteAddress.getHostAddress())) + System.out.println(FrankServer.class.getName() + " socket pair showing host name, address, port:"); + System.out.println(" (( " + + localAddress.getHostName() + "=" + localAddress.getHostAddress() + ", " + localPort + " ), ( " + + remoteAddress.getHostName() + "=" + remoteAddress.getHostAddress() + ", " + remotePort + " ))"); + + if (localAddress.getHostName().equals(localAddress.getHostAddress()) + || remoteAddress.getHostName().equals(remoteAddress.getHostAddress())) { System.out.println(" note HostName matches address if host has no DNS name"); - - // Notice the use of flush() and try w/ resources. Without + } + + // Not/*i*/ce the use of flush() and try w/ resources. Without // the try w/ resources the Socket object may stay open for // a while after the client has stopped needing this // connection. try w/ resources explicitly ends the connection. @@ -77,7 +79,7 @@ public class HittnerDTcpExampleServer { } } } catch (IOException e) { - System.err.println("Problem with " + HittnerDTcpExampleServer.class.getName() + " networking: " + e); + System.err.println("Problem with " + FrankServer.class.getName() + " networking: " + e); // Provide more helpful information to user if exception occurs due to running twice at one time if (e instanceof java.net.BindException) { diff --git a/assignments/src/MV3500Cohort2021JulySeptember/homework2/FrankTcpExample3Client.java b/assignments/src/MV3500Cohort2021JulySeptember/homework2/FrankTcpExample3Client.java new file mode 100644 index 0000000000000000000000000000000000000000..59842415433cd6df81d943477b2c6af87b316d61 --- /dev/null +++ b/assignments/src/MV3500Cohort2021JulySeptember/homework2/FrankTcpExample3Client.java @@ -0,0 +1,96 @@ +package MV3500Cohort2021JulySeptember.homework2; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.Reader; +import java.net.Socket; + +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +/** + * + * @author justi + */ +public class FrankTcpExample3Client { + + /** + */ + public final static String LOCALHOST = "0:0:0:0:0:0:0:1"; + + /** + * Program invocation, execution starts here + * + * @param args command-line arguments + * @throws java.lang.InterruptedException user cancels execution + */ + public static void main(String[] args) throws InterruptedException { + + // Local variables/fields + Socket socket = null; + InputStream is; + Reader isr; + BufferedReader br; + String serverMessage; + int clientLoopCount = 0; + + try { + while (true) { + clientLoopCount++; // increment at beginning of loop for reliability + System.out.println( "creating socket..."); + + // We request an IP to connect to ("localhost") and + // port number at that IP (2317). This establishes + // a connection to that IP in the form of a Socket + // object; the server uses a ServerSocket to wait for + // connections. + socket = new Socket(LOCALHOST, 2318); // locohost? + + // Now hook everything up (i.e. set up the streams), Java style: + is = socket.getInputStream(); + isr = new InputStreamReader(is); + br = new BufferedReader(isr); + + // Read a single line written by the server. We'd + // do things a bit differently if there were many lines to be read + // from the server instead of one only. + serverMessage = br.readLine(); + System.out.println("*********************************"); + + System.out.print( clientLoopCount + ": "); + System.out.println("Hola!"); + System.out.println("The message the server sent was: '" + serverMessage + "'"); + // socket gets closed, either automatically/silently by this code (or possibly by the server) + if (serverMessage.equals("this is good bye message from Franks server")) { //if client recieved termanation message stop client + break; + } + Thread.sleep(1000); // turned it down to 1 second + + } // end while(true) // infinite loops are dangerous, be sure to kill this process! + } catch (IOException e) { + System.err.println("Problem with " + FrankTcpExample3Client.class.getName() + " networking:"); // describe what is happening + System.err.println("Error: " + e); + + // Provide more helpful information to user if exception occurs due to running twice at one time + if (e instanceof java.net.BindException) { + System.err.println("*** Be sure to stop any other running instances of programs using this port!"); + } + } finally // occurs after any other activity when shutting down + { + try { + if (socket != null) { + socket.close(); + } + } catch (IOException e) { + } + + // program exit: tell somebody about that happening. Likely cause: server drops connection. + System.out.println(); + System.out.println("Good Bye!!!"); + } + } +} diff --git a/assignments/src/MV3500Cohort2021JulySeptember/homework2/HittnerDTcpExample3Client.java b/assignments/src/MV3500Cohort2021JulySeptember/homework2/HittnerDTcpExample3Client(2).java similarity index 98% rename from assignments/src/MV3500Cohort2021JulySeptember/homework2/HittnerDTcpExample3Client.java rename to assignments/src/MV3500Cohort2021JulySeptember/homework2/HittnerDTcpExample3Client(2).java index f1119e65369fc79ac7a7e3abd2755fa7f5c50510..8362c3a4632b267e47a6448faadd19c375c619a2 100644 --- a/assignments/src/MV3500Cohort2021JulySeptember/homework2/HittnerDTcpExample3Client.java +++ b/assignments/src/MV3500Cohort2021JulySeptember/homework2/HittnerDTcpExample3Client(2).java @@ -3,7 +3,7 @@ import java.io.*; import java.net.*; /** - * Hey why not say what this thing does... + * * @author Dom Hittner */ public class HittnerDTcpExample3Client { diff --git a/assignments/src/MV3500Cohort2021JulySeptember/homework2/HittnerNickTcpExample3Client.java b/assignments/src/MV3500Cohort2021JulySeptember/homework2/HittnerNickTcpExample3Client.java new file mode 100644 index 0000000000000000000000000000000000000000..a5ef04e793db41b04a9ffcaa0ea6419eb4594292 --- /dev/null +++ b/assignments/src/MV3500Cohort2021JulySeptember/homework2/HittnerNickTcpExample3Client.java @@ -0,0 +1,95 @@ +package MV3500Cohort2021JulySeptember.homework2; + +import java.io.*; +import java.net.*; + +/** + * Before, we always used telnet (netcat) to connect to the server. Here we are + * now writing our own program to do the connection. + * + * As you will see, when we run this after we start the server we will see the + * same string telnet printed, sent by the server. The output at the server will + * show different socket pairs for each time the loop iterates. + * + * @author mcgredo + * @author brutzman + */ +public class HittnerNickTcpExample3Client { + + /** IPv6 String constant for localhost address, similarly IPv4 127.0.0.1 + * @see <a href="https://en.wikipedia.org/wiki/localhost">https://en.wikipedia.org/wiki/localhost</a> + * @see <a href="https://en.wikipedia.org/wiki/IPv6_address">https://en.wikipedia.org/wiki/IPv6_address</a> + */ + public final static String LOCALHOST = "0:0:0:0:0:0:0:1"; + + /** + * Program invocation, execution starts here + * @param args command-line arguments + * @throws java.lang.InterruptedException user can cancel execution + */ + public static void main(String[] args) throws InterruptedException { + + // Local variables/fields + Socket socket = null; + InputStream is; + Reader isr; + BufferedReader br; + String serverMessage; + int clientLoopCount = 0; + + try { + while (true) + { + clientLoopCount++; // increment at beginning of loop for reliability + System.out.println(HittnerNickTcpExample3Client.class.getName() + " creating socket..."); + + // We request an IP to connect to ("localhost") and + // port number at that IP (2317). This establishes + // a connection to that IP in the form of a Socket + // object; the server uses a ServerSocket to wait for + // connections. + socket = new Socket(LOCALHOST, 2317); // locohost? + + // Now hook everything up (i.e. set up the streams), Java style: + is = socket.getInputStream(); + isr = new InputStreamReader(is); + br = new BufferedReader(isr); + + // Read a single line written by the server. We'd + // do things a bit differently if there were many lines to be read + // from the server instead of one only. + serverMessage = br.readLine(); + System.out.println("=================================================="); + + System.out.print ("Client loop " + clientLoopCount + ": "); + System.out.println("Good morning, Nick"); + System.out.println("The message the server sent was: '" + serverMessage + "'"); + // socket gets closed, either automatically/silently by this code (or possibly by the server) + + Thread.sleep(500l); // slow things down, for example 500l (long) = 500 msec (1/2 second) + + } // end while(true) // infinite loops are dangerous, be sure to kill this process! + } + catch (IOException e) + { + System.err.println("Problem with " + HittnerNickTcpExample3Client.class.getName() + " networking:"); // describe what is happening + System.err.println("Error: " + e); + + // Provide more helpful information to user if exception occurs due to running twice at one time + if (e instanceof java.net.BindException) { + System.err.println("*** Be sure to stop any other running instances of programs using this port!"); + } + } + finally // occurs after any other activity when shutting down + { + try { + if (socket != null) + socket.close(); + } catch (IOException e) {} + + // program exit: tell somebody about that happening. Likely cause: server drops connection. + System.out.println(); + System.out.println(HittnerNickTcpExample3Client.class.getName() + " exit"); + } + } +} diff --git a/assignments/src/MV3500Cohort2021JulySeptember/homework2/Lentz/.gitkeep b/assignments/src/MV3500Cohort2021JulySeptember/homework2/Lentz/.gitkeep deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/assignments/src/MV3500Cohort2021JulySeptember/homework2/Lentz/README.md b/assignments/src/MV3500Cohort2021JulySeptember/homework2/Lentz/README.md new file mode 100644 index 0000000000000000000000000000000000000000..d66f8842684f9e253b3425518c182753d2066e66 --- /dev/null +++ b/assignments/src/MV3500Cohort2021JulySeptember/homework2/Lentz/README.md @@ -0,0 +1,14 @@ +## Assignment II + +This client-server software demonstrates the ability to perform a network task, specifically to remotely render an X3D object and return the rendered image to the client making the request. + +The server has access to ~15,000 X3D models as well as the view3Dscene rendering service. The process starts with a user requesting the object ID, and the service fetches the model and associated resources. It passes these to view3Dscene and returns the rendered frame to the client. You can configure the server to use any repository by replacing the 'https://nps.edu/x3d_repository/' with the respective sequentially indexed model repository or model proxy service. + +### The following steps are needed to set up and run these two applications. +1) on the server with CastleGameEngine, update the repository and start the server.py service using. +`python server.py` +2) On the client, run the command with the server's IP address, port, and model index as parameters respectively. E.g.: +`python client.py 192.168.86.225 65501 8100` + +I placed a returned rendered vehicle object image on the UML diagram showing this output. + diff --git a/assignments/src/MV3500Cohort2021JulySeptember/homework2/Lentz/package-info.java b/assignments/src/MV3500Cohort2021JulySeptember/homework2/Lentz/package-info.java deleted file mode 100644 index 0881d38d031210810106c9dc6287534c04a41f32..0000000000000000000000000000000000000000 --- a/assignments/src/MV3500Cohort2021JulySeptember/homework2/Lentz/package-info.java +++ /dev/null @@ -1,10 +0,0 @@ -/** - * TCP Unicast homework 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 - * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful">StackOverflow: why-is-package-info-java-useful</a> - * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java">StackOverflow: how-do-i-document-packages-in-java</a> - */ - -package MV3500Cohort2021JulySeptember.homework2.Lentz; diff --git a/assignments/src/MV3500Cohort2021JulySeptember/homework2/ReynoldsTcpExample3Client.java b/assignments/src/MV3500Cohort2021JulySeptember/homework2/Reynolds/ReynoldsTcpExample3Client.java similarity index 96% rename from assignments/src/MV3500Cohort2021JulySeptember/homework2/ReynoldsTcpExample3Client.java rename to assignments/src/MV3500Cohort2021JulySeptember/homework2/Reynolds/ReynoldsTcpExample3Client.java index 3ffc35822e0bc7acd21a856e8afb7d9e938bb992..da59c2cf2aeb869f4f53bd94599fb3909e51ae74 100644 --- a/assignments/src/MV3500Cohort2021JulySeptember/homework2/ReynoldsTcpExample3Client.java +++ b/assignments/src/MV3500Cohort2021JulySeptember/homework2/Reynolds/ReynoldsTcpExample3Client.java @@ -1,4 +1,4 @@ -package MV3500Cohort2021JulySeptember.homework2; +package MV3500Cohort2021JulySeptember.homework2.Reynolds; import java.io.*; import java.net.*; @@ -49,7 +49,7 @@ public class ReynoldsTcpExample3Client { // a connection to that IP in the form of a Socket // object; the server uses a ServerSocket to wait for // connections. - socket = new Socket(LOCALHOST, 2317); // locohost? + socket = new Socket(LOCALHOST, 2317); // locohost referenced at the top of this document // Now hook everything up (i.e. set up the streams), Java style: is = socket.getInputStream(); @@ -64,7 +64,7 @@ public class ReynoldsTcpExample3Client { System.out.print ("Client # " + clientLoopCount + ": "); System.out.println("I've sided with the empire!"); - System.out.println("The the serverlord has spoken... it said: '" + serverMessage + "' \n" ); + System.out.println("The the serverlord has spoken... it said: '" + serverMessage + "'\n" ); // socket gets closed, either automatically/silently by this code (or possibly by the server) Thread.sleep(500l); // slow things down, for example 500l (long) = 500 msec diff --git a/assignments/src/MV3500Cohort2021JulySeptember/homework2/ReynoldsTcpExample3Server.java b/assignments/src/MV3500Cohort2021JulySeptember/homework2/Reynolds/ReynoldsTcpExample3Server.java similarity index 98% rename from assignments/src/MV3500Cohort2021JulySeptember/homework2/ReynoldsTcpExample3Server.java rename to assignments/src/MV3500Cohort2021JulySeptember/homework2/Reynolds/ReynoldsTcpExample3Server.java index f56e658ebdb33b6c5d00f5ad7b3e96a16511ad10..47f647ed736bc74a8df6a6a680e9d9b3fc937784 100644 --- a/assignments/src/MV3500Cohort2021JulySeptember/homework2/ReynoldsTcpExample3Server.java +++ b/assignments/src/MV3500Cohort2021JulySeptember/homework2/Reynolds/ReynoldsTcpExample3Server.java @@ -1,4 +1,4 @@ -package MV3500Cohort2021JulySeptember.homework2; +package MV3500Cohort2021JulySeptember.homework2.Reynolds; import java.io.*; import java.net.*; diff --git a/assignments/src/MV3500Cohort2021JulySeptember/homework3/Frank/FrankAssisgmentThreeSimulationWireShark.pdf b/assignments/src/MV3500Cohort2021JulySeptember/homework3/Frank/FrankAssisgmentThreeSimulationWireShark.pdf new file mode 100644 index 0000000000000000000000000000000000000000..d1521da6db4dfd68f0304ba45b50b3826990a6ea Binary files /dev/null and b/assignments/src/MV3500Cohort2021JulySeptember/homework3/Frank/FrankAssisgmentThreeSimulationWireShark.pdf differ diff --git a/assignments/src/MV3500Cohort2021JulySeptember/homework3/Frank/PduCaptureLog9.dislog b/assignments/src/MV3500Cohort2021JulySeptember/homework3/Frank/PduCaptureLog9.dislog new file mode 100644 index 0000000000000000000000000000000000000000..8f9a5d932bf28f4510ce9946aadb85463d544538 --- /dev/null +++ b/assignments/src/MV3500Cohort2021JulySeptember/homework3/Frank/PduCaptureLog9.dislog @@ -0,0 +1,19 @@ +# Start, ENCODING_PLAINTEXT, 20210903_081736, DIS capture file, .\pduLog\PduCaptureLog9.dislog +[0,0,0,0,0,0,0,0],[7,1,1,1,74,-12,49,-59,0,-112,40,0,0,1,0,13,0,25,0,0,1,1,0,-31,1,1,1,0,0,0,0,-31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-63,68,-88,22,93,-11,3,30,-63,80,-101,96,51,-37,-21,-34,65,76,-38,101,8,67,-70,62,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DisPduType 01 ENTITY_STATE +[0,0,0,0,6,70,51,-28],[7,1,2,2,74,-12,87,13,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,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DisPduType 02 FIRE +[0,0,0,0,12,-24,92,104],[7,1,22,5,75,28,-50,-5,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,0,-81,-46,0,0,1,8,77,86,51,53,48,48,32,70,114,97,110,107,65,115,115,105,103,110,109,101,110,116,51,83,105,109,117,108,97,116,105,111,110,0,0,0,0,0,0,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] # DisPduType 22 COMMENT +[0,0,0,0,-118,-23,-42,120],[7,1,1,1,74,-12,49,-59,0,-112,40,0,0,1,0,13,0,25,0,0,1,1,0,-31,1,1,1,0,0,0,0,-31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-63,68,-88,31,-35,-11,3,30,-63,80,-101,114,-13,-37,-21,-34,65,76,-38,101,8,67,-70,62,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DisPduType 01 ENTITY_STATE +[0,0,0,0,-111,89,-4,64],[7,1,2,2,74,-12,87,13,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,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DisPduType 02 FIRE +[0,0,0,0,-105,-51,-31,4],[7,1,22,5,75,71,71,-115,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,0,-81,-46,0,0,1,8,77,86,51,53,48,48,32,70,114,97,110,107,65,115,115,105,103,110,109,101,110,116,51,83,105,109,117,108,97,116,105,111,110,0,0,0,0,0,0,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] # DisPduType 22 COMMENT +[0,0,0,1,22,32,-73,-4],[7,1,1,1,74,-12,49,-59,0,-112,40,0,0,1,0,13,0,25,0,0,1,1,0,-31,1,1,1,0,0,0,0,-31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-63,68,-88,41,93,-11,3,30,-63,80,-101,-123,-77,-37,-21,-34,65,76,-38,101,8,67,-70,62,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DisPduType 01 ENTITY_STATE +[0,0,0,1,28,-103,18,40],[7,1,2,2,74,-12,87,13,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,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DisPduType 02 FIRE +[0,0,0,1,35,22,-49,60],[7,1,22,5,75,113,-50,25,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,0,-81,-46,0,0,1,8,77,86,51,53,48,48,32,70,114,97,110,107,65,115,115,105,103,110,109,101,110,116,51,83,105,109,117,108,97,116,105,111,110,0,0,0,0,0,0,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] # DisPduType 22 COMMENT +[0,0,0,1,41,-121,33,40],[7,1,62,10,74,-12,87,13,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,3,-87,-128,0,0,1,-72,77,49,32,65,98,114,97,109,115,32,65,99,113,117,105,114,101,115,32,84,97,114,103,101,116,32,45,32,84,54,50,32,119,105,116,104,32,105,110,32,102,105,114,105,110,103,32,100,105,115,116,97,110,99,101,0] # DisPduType 62 COMMENT_RELIABLE +[0,0,0,1,-89,-38,-69,112],[7,1,1,1,74,-12,49,-59,0,-112,40,0,0,1,0,13,0,25,0,0,1,1,0,-31,1,1,1,0,0,0,0,-31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-63,68,-88,50,-35,-11,3,30,-63,80,-101,-104,115,-37,-21,-34,65,76,-38,101,8,67,-70,62,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DisPduType 01 ENTITY_STATE +[0,0,0,1,-82,51,97,-104],[7,1,2,2,74,-12,87,13,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,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DisPduType 02 FIRE +[0,0,0,1,-76,-84,14,-8],[7,1,22,5,75,-98,71,77,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,0,-81,-46,0,0,1,8,77,86,51,53,48,48,32,70,114,97,110,107,65,115,115,105,103,110,109,101,110,116,51,83,105,109,117,108,97,116,105,111,110,0,0,0,0,0,0,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] # DisPduType 22 COMMENT +[0,0,0,2,50,-55,-62,108],[7,1,1,1,74,-12,49,-59,0,-112,40,0,0,1,0,13,0,25,0,0,1,1,0,-31,1,1,1,0,0,0,0,-31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-63,68,-88,60,93,-11,3,30,-63,80,-101,-85,51,-37,-21,-34,65,76,-38,101,8,67,-70,62,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DisPduType 01 ENTITY_STATE +[0,0,0,2,57,58,-37,-12],[7,1,2,2,74,-12,87,13,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,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DisPduType 02 FIRE +[0,0,0,2,63,-78,116,-60],[7,1,22,5,75,-56,-65,-33,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,0,-81,-46,0,0,1,8,77,86,51,53,48,48,32,70,114,97,110,107,65,115,115,105,103,110,109,101,110,116,51,83,105,109,117,108,97,116,105,111,110,0,0,0,0,0,0,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] # DisPduType 22 COMMENT +[0,0,0,2,70,54,59,40],[7,1,22,5,75,-54,-69,-39,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,1,8,77,86,51,53,48,48,32,70,114,97,110,107,65,115,115,105,103,110,109,101,110,116,51,83,105,109,117,108,97,116,105,111,110,0,0,0,0,0,0,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] # DisPduType 22 COMMENT +# Finish, ENCODING_PLAINTEXT, 20210903_081746, DIS capture file, .\pduLog\PduCaptureLog9.dislog diff --git a/assignments/src/MV3500Cohort2021JulySeptember/homework3/Lentz/.gitkeep b/assignments/src/MV3500Cohort2021JulySeptember/homework3/Lentz/.gitkeep deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/assignments/src/MV3500Cohort2021JulySeptember/homework3/McNeely/ExampleSimulationProgramMcNeely.java b/assignments/src/MV3500Cohort2021JulySeptember/homework3/McNeely/ExampleSimulationProgramMcNeely.java index 56337a2abd717aedba8541df8b1fd275ec311a3c..b58ba263b14b51c4e275080be861f0b471b236f2 100644 --- a/assignments/src/MV3500Cohort2021JulySeptember/homework3/McNeely/ExampleSimulationProgramMcNeely.java +++ b/assignments/src/MV3500Cohort2021JulySeptember/homework3/McNeely/ExampleSimulationProgramMcNeely.java @@ -86,7 +86,7 @@ public class ExampleSimulationProgramMcNeely // make your reports: narrative code for CommentPdu here (set all to empty strings to avoid sending) narrativeMessage1 = "MV3500 ExampleSimulationProgram"; narrativeMessage2 = "runSimulation() loop " + loopCount; - narrativeMessage3 = "Well... there it is."; // intentionally blank for testing + narrativeMessage3 = "Well... there it is."; //In the great words of Jeff Goldblum // your loop termination condition goes here if (loopCount > 4) // for example diff --git a/assignments/src/MV3500Cohort2021JulySeptember/homework4/Frank/CPT Justin J.docx b/assignments/src/MV3500Cohort2021JulySeptember/homework4/Frank/CPT Justin J.docx new file mode 100644 index 0000000000000000000000000000000000000000..d9ed9fb5cb775c5b7f36fc3a7b07910b80c15b89 Binary files /dev/null and b/assignments/src/MV3500Cohort2021JulySeptember/homework4/Frank/CPT Justin J.docx differ diff --git a/assignments/src/MV3500Cohort2021JulySeptember/homework4/Lentz/.gitkeep b/assignments/src/MV3500Cohort2021JulySeptember/homework4/Lentz/.gitkeep deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/assignments/src/MV3500Cohort2021JulySeptember/projects/Fisher/CommentPDUFisherTest.java b/assignments/src/MV3500Cohort2021JulySeptember/projects/Fisher/CommentPDUFisherTest.java deleted file mode 100644 index ff165032efa81a43cd8be01cfc16b95f1c08c095..0000000000000000000000000000000000000000 --- a/assignments/src/MV3500Cohort2021JulySeptember/projects/Fisher/CommentPDUFisherTest.java +++ /dev/null @@ -1,131 +0,0 @@ -package MV3500Cohort2021JulySeptember.projects.Fisher; - -import edu.nps.moves.dis7.enumerations.VariableRecordType; -import edu.nps.moves.dis7.pdus.Pdu; -import edu.nps.moves.dis7.utilities.PduFactory; - -/** - * - * @author adfis - */ -public class CommentPDUFisherTest { - - //BeforeAll - public static void setUpClass() - { - System.out.println("CommentPdusTest"); - } - - //AfterAll - public static void tearDownClass() - { - } - - //BeforeEach - public void setUp() - { - } - - //AfterEach - public void tearDown() - { - } - - private Pdu receivedPdu; - - //Test - public void testRoundTrip() - { - PduFactory factory = new PduFactory(); - setUpReceiver(); - - testOne(factory.makeCommentPdu()); - testOne(factory.makeCommentPdu("123_test_string")); - testOne(factory.makeCommentPdu(VariableRecordType.MODEL_TYPE, "456_test with type = modeltype")); - testOne(factory.makeCommentPdu("xyz first message","mno second message", "jkl third message")); - - testOne(factory.makeCommentReliablePdu()); - testOne(factory.makeCommentReliablePdu("789_test_string")); - testOne(factory.makeCommentReliablePdu(VariableRecordType.ACLS_AIRCRAFT_REPORT, "abc_test with type = acls_aircraft_report")); - testOne(factory.makeCommentReliablePdu("xyz R first message","mno R second message", "jkl R third message")); - } - - private void testOne(Pdu pdu) - { - sendPdu(pdu); // will wait a while - assertTrue(receivedPdu != null, "No response from network receive"); - assertTrue(compare(pdu,receivedPdu),"Comparison failed"); - receivedPdu = null; - } - - private void sendPdu(Pdu pdu) - { - try { - Thread.sleep(250l); // make sure receiver is listening - DisNetworking disnet = new DisNetworking(); - disnet.sendPdu(pdu); - - Thread.sleep(1000l); - } - catch (InterruptedException ex) { - System.err.println("Error sending Multicast: " + ex.getLocalizedMessage()); - System.exit(1); - } - } - - private boolean compare(Pdu pdu1, Pdu pdu2) - { - return pdu1.equals(pdu2); - } - - private void setUpReceiver() - { - Thread rcvThread = new Thread(() -> { - while(true) { - receivedPdu = new DisNetworking().receivePdu(); // blocks - } - }); - - rcvThread.setPriority(Thread.NORM_PRIORITY); - rcvThread.setDaemon(true); - rcvThread.start(); - } - - /** - * - * @param args - */ - public static void main(String[] args) - { - //new CommentPdusTest().testRoundTrip(); - } - - private void assertTrue(boolean b, String no_response_from_network_receive) { - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. - } - - private static class CommentPdusTest { - - public CommentPdusTest() { - } - - //private void testRoundTrip() { - // throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. - // } - } - - private static class DisNetworking { - - public DisNetworking() { - } - - private Pdu receivePdu() { - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. - } - - private void sendPdu(Pdu pdu) { - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. - } - } -} - diff --git a/assignments/src/MV3500Cohort2021JulySeptember/projects/Fisher/Example_ways_to_set_EntityType.png b/assignments/src/MV3500Cohort2021JulySeptember/projects/Fisher/Example_ways_to_set_EntityType.png new file mode 100644 index 0000000000000000000000000000000000000000..b1a99c0097b5c65dd7e39f2f201c10a363bfb67e Binary files /dev/null and b/assignments/src/MV3500Cohort2021JulySeptember/projects/Fisher/Example_ways_to_set_EntityType.png differ diff --git a/assignments/src/MV3500Cohort2021JulySeptember/projects/Fisher/Fisher_Project_-_PDU_Capture.pcapng b/assignments/src/MV3500Cohort2021JulySeptember/projects/Fisher/Fisher_Project_-_PDU_Capture.pcapng new file mode 100644 index 0000000000000000000000000000000000000000..0d1813180b4f01107618645169e12b4eec94372b Binary files /dev/null and b/assignments/src/MV3500Cohort2021JulySeptember/projects/Fisher/Fisher_Project_-_PDU_Capture.pcapng differ diff --git a/assignments/src/MV3500Cohort2021JulySeptember/projects/Fisher/README b/assignments/src/MV3500Cohort2021JulySeptember/projects/Fisher/README index fb73844fe4364e1d9683fc82736fa61da66c53f2..69686c47e5975d9f22fd74b7247f3194d6f900a3 100644 --- a/assignments/src/MV3500Cohort2021JulySeptember/projects/Fisher/README +++ b/assignments/src/MV3500Cohort2021JulySeptember/projects/Fisher/README @@ -1,9 +1,13 @@ The program I have designed is branching off of Homework 3 to expand the scenario a bit and add some more -PDUs to be utilized. +PDUs to be utilized in a simulation. -My scenario starts with a US vehicle (JLTV) starting at (0,0,0) and moving on a straight line route to (10,0,0). -While on the route, the unit is struck by a command detonated IED by a civilain male with a cell phone at +My scenario starts with a US vehicle (JLTV) equipped with an M240 medium machine gun starting at (0,0,0) and moving on a straight line route to (10,0,0). + +While on the route, the unit is struck by an IED detonated by a civilain male with a cell phone at coordinates (10,0,100). Upon being struck, the friendly unit fires at the enemy with an M240 machine gun with a -range of 1100m firing at the rapid rate (200 rounds per minute). +range of 1000m firing at the rapid rate (200 rounds per minute). After a few seconds of firing, the threat has been neutralized and the simulation ends. + +You will notice a few things in this code that can be changed by the user for simulating different scenarios and effects. First, there are three different detonation effects used depending on the probability of detonation used. If we set a low probability of the detonation, the effect will be a dud. If we put a medium probability (0.2-0.8) then we receive a proximate detonation. If we use a high detonation rate (>0.8) then we will see a direct hit. Future developers could then assess levels of damage based on this. I have also added a contactCounter. +This can be used to see effects on the enemy based on marksmanship of the shooter. It is currently set to 50% (2/4) meaning the first 2 of 4 bursts will impact the dirt around the enemy. This is done using another detonation PDU with dirt impact effects. After the first 2 bursts hit short of the target, we then see the next 2 impacts show in the detonation PDU as direct hit effects. After this the enemy has been neutralized and the simulation is over. diff --git a/assignments/src/MV3500Cohort2021JulySeptember/projects/Fisher/project_screenshot_JLTV.png b/assignments/src/MV3500Cohort2021JulySeptember/projects/Fisher/project_screenshot_JLTV.png new file mode 100644 index 0000000000000000000000000000000000000000..d00d8c161eb72fe2396220b86f31070bc167e0f5 Binary files /dev/null and b/assignments/src/MV3500Cohort2021JulySeptember/projects/Fisher/project_screenshot_JLTV.png differ diff --git a/assignments/src/MV3500Cohort2021JulySeptember/projects/Fisher/project_screenshot_afg_male.png b/assignments/src/MV3500Cohort2021JulySeptember/projects/Fisher/project_screenshot_afg_male.png new file mode 100644 index 0000000000000000000000000000000000000000..2e93ba7496491e522fed3fa90f888e9b51fc4ee8 Binary files /dev/null and b/assignments/src/MV3500Cohort2021JulySeptember/projects/Fisher/project_screenshot_afg_male.png differ diff --git a/assignments/src/MV3500Cohort2021JulySeptember/projects/Lentz/.gitkeep b/assignments/src/MV3500Cohort2021JulySeptember/projects/Lentz/.gitkeep deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/assignments/src/MV3500Cohort2021JulySeptember/projects/Lentz/README.md b/assignments/src/MV3500Cohort2021JulySeptember/projects/Lentz/README.md index 78e86d6a7993a2bd4e80d86a043e7f6bb7345abb..d71401cfbccbd29be1f025ff60d7d662598b661b 100644 --- a/assignments/src/MV3500Cohort2021JulySeptember/projects/Lentz/README.md +++ b/assignments/src/MV3500Cohort2021JulySeptember/projects/Lentz/README.md @@ -1,4 +1,78 @@ ## Final Course Project -Final project deliverables: -* TBD + In this project, we use several techniques and concepts to simulate software-defined transmitter/receiver systems through an aviation rf receiver use case. This version of the project plays a passive role. The SDR component is an RF receiver node to collect and transform broadcast messages into DIS messages to produce a 'home aviation spotter' awareness system. + +The system is composed of a few parts: +A software-defined radio setup [1] with a compiled FPGA image and PDU transmitter source code [2] to receive ADS-B data [3]. +A conversion model for transforming message traffic in the DIS PDU Entity State messages. +A watch system to visualize DIS broadcasts and alerts when variables are within tolerance for conditions of interest. + +This project's overview and [technical walkthrough videos are available here](https://youtu.be/e7BWm0TBmFk?t=4) [4]. + + +<figure class="video_container"> + <iframe src="https://youtu.be/e7BWm0TBmFk?t=4" frameborder="0" allowfullscreen="true"> </iframe> +</figure> + + + +The captured [ADSB Entity State PDU data is available here](https://drive.google.com/file/d/1KCuFVBYzKMHhdhrRL40G5zzu1c6ivymz/view?usp=sharing) . The presentation slides are in mv3500_Project_Lentz.pdf and the technical details from the technical walkthrough video follow. + + +### install gnu radio using conda +'conda config --env --add channels conda-forge' +'conda config --env --set channel_priority strict' +'conda create --name rf_pdu python=3.8' +'conda activate rf_pdu' +'conda install --yes gnuradio=3.8.1' +### when not needed +conda env remove --name rf_pdu + +### install opendis +'git clone https://github.com/open-dis/open-dis-python.git' +'cd open-dis-python' +'pip install .' + + +### pull the Ettus Research repo and configure the Linux rules using the following steps +'git clone https://github.com/EttusResearch/uhd.git' +'cd uhd/host/utils' +'sudo cp uhd-usrp.rules /etc/udev/rules.d/.' +'sudo udevadm control --reload-rules' +'sudo udevadm trigger' + + +### clone, build, and run +'git clone https://github.com/ricklentz/gr-adsb' +'mkdir build' +'cmake -DCMAKE_INSTALL_PREFIX=~/anaconda3/envs/rf_pdu ../' +'make' +'sudo make install' +'cd ..' +'cd examples' + + +### ensure the UHD device is connected to the source node +'sudo uhd_find_devices' + +### make sure the device fpga images are available e.g. +'python ~/anaconda3/envs/rf_pdu/lib/uhd/utils/uhd_images_downloader.py' + + + +### build the adsb_rx.grc graph using grcc +'cd ~/Github/gr-adsb/examples/' +'grcc adsb_rx.py' + +### and run the compiled flowgraph or +'python adsb_rx.py' + +### build and run with the gnuradio-companion +'gnuradio-companion adsb_rx.grc' + +### References +[1 Ettus Research SDR FPGAs](https://www.ettus.com/all-products/ub210-kit/) +[2 Project Source Code](https://github.com/ricklentz/gr-adsb) +[3 ADSB Nextgen Program](https://www.faa.gov/nextgen/programs/adsb/) +[4 Project Overview and Technical Walkthrough](https://youtu.be/e7BWm0TBmFk?t=4). + diff --git a/assignments/src/MV3500Cohort2021JulySeptember/projects/Lentz/mv3500_Project_Lentz.pdf b/assignments/src/MV3500Cohort2021JulySeptember/projects/Lentz/mv3500_Project_Lentz.pdf new file mode 100644 index 0000000000000000000000000000000000000000..ceee623b505602c20dd0a9132725fa2ee8c01d91 Binary files /dev/null and b/assignments/src/MV3500Cohort2021JulySeptember/projects/Lentz/mv3500_Project_Lentz.pdf differ diff --git a/assignments/src/MV3500Cohort2021JulySeptember/projects/McneelyLeckieProject/McneelyLeckieReceiver.java b/assignments/src/MV3500Cohort2021JulySeptember/projects/McneelyLeckieProject/McneelyLeckieReceiver.java new file mode 100644 index 0000000000000000000000000000000000000000..02b4a19ac705628714942b287e526375bf83217a --- /dev/null +++ b/assignments/src/MV3500Cohort2021JulySeptember/projects/McneelyLeckieProject/McneelyLeckieReceiver.java @@ -0,0 +1,153 @@ + + +package MV3500Cohort2021JulySeptember.projects.McneelyLeckieProject; + +import edu.nps.moves.dis.CommentPdu; +import edu.nps.moves.dis.OneByteChunk; +import edu.nps.moves.dis.Pdu; +import edu.nps.moves.dis.VariableDatum; +import edu.nps.moves.disenum.PduType; +import edu.nps.moves.disutil.PduFactory; +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.net.DatagramPacket; +import java.net.InetAddress; +import java.net.MulticastSocket; +import java.util.ArrayList; + +/** + * + * @author Justin Mcneely + * @author Jacob Leckie + */ + + +public class McneelyLeckieReceiver { + + /** socket parameter of interest */ + public static final int MULTICAST_PORT = 3000; + /** socket parameter of interest */ + public static final String MULTICAST_GROUP = "239.1.2.15"; +// public static final String MULTICAST_GROUP = "192.168.1.247"; + /** socket parameter of interest */ + static final boolean USE_FAST_ESPDU = false; + + /** + * Program invocation, execution starts here + * @param args command-line arguments + */ + @SuppressWarnings("deprecation") + public static void main(String[] args) + { + + PduFactory factory; + try + { + + // This is a java/IPv6 problem. You should also add it to the + // arguments used to start the app, eg -Djava.net.preferIPv4Stack=true + // set in the "run" section of preferences. Also, typically + // netbeans must be restarted after these settings. + // https://stackoverflow.com/questions/18747134/getting-cant-assign-requested-address-java-net-socketexception-using-ehcache + //System.setProperty("java.net.preferIPv4Stack", "true"); + //System.out.println("DisExamples.PduReceiver started..."); + + /*MulticastSocket multicastSocket = new MulticastSocket(DESTINATION_PORT); + multicastSocket.setTimeToLive(TTL); + InetAddress multicastAddress = InetAddress.getByName(MULTICAST_ADDRESS); + System.out.println(multicastAddress); + // Join group useful on receiving side + multicastSocket.joinGroup(multicastAddress); + // You can join multiple groups here*/ + System.setProperty("java.net.preferIPv4Stack", "true"); + System.out.println("DisExamples.PduReceiver started... ORDER RECIEVED!"); + + MulticastSocket socket = new MulticastSocket (MULTICAST_PORT); + InetAddress address = InetAddress.getByName(MULTICAST_GROUP); + socket.joinGroup(address); + + factory = new PduFactory(); + + int count = 0; + int partsAvail = 6; + int partsSent = 0; + + while(true) + { + + byte[] packetArray = new byte[1500]; + DatagramPacket packet = new DatagramPacket(packetArray, packetArray.length); + + socket.receive(packet); + + Pdu pdu = factory.createPdu (packet.getData()); + if (pdu != null) + { + short pduType = pdu.getPduType(); + String pduTypeName = pdu.getClass().getName(); + short protocolFamily = pdu.getProtocolFamily(); // TODO get string enumeration + + if(pdu.getPduTypeEnum() == PduType.COMMENT){ + CommentPdu cPdu = (CommentPdu)pdu; + @SuppressWarnings("unchecked") + ArrayList<VariableDatum> payload = (ArrayList)cPdu.getVariableDatums(); + VariableDatum payloadWrapper = payload.get(0); + @SuppressWarnings("unchecked") + ArrayList<OneByteChunk> oBC = (ArrayList)payloadWrapper.getVariableData(); + + //byte[] imageByte = new byte[100000]; + + /*for(int i = 0; i < oBC.size(); i++){ + imageByte[i] = oBC.get(i).getOtherParameters()[0]; + } + + ByteArrayInputStream bais = new ByteArrayInputStream(imageByte); + BufferedImage bimage = ImageIO.read(bais); + //image = bimage; + JFrame frame = new JFrame(); + frame.setSize(300, 300); + //JLabel label = new JLabel(new ImageIcon(image)); + //frame.add(label); + frame.setVisible(true); + frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);*/ + } + count++; + + if(count >= 1){ + partsAvail-=1; + partsSent+=1; + } + System.out.println("Marine Aircraft Logistics Squadron 29: Wolverines!"); + System.out.println("Status Update: " + count + " NSN ID: 1874542689"); + + StringBuilder message = new StringBuilder(); + message.append("received DIS PDU: "); + + message.append("pduType "); + if (pduType <= 1500) { + message.append(" "); + message.append(pduType).append(" ").append(pduTypeName); + message.append(", protocolFamily=").append(protocolFamily); + System.out.println(message.toString()); + } + + } + else System.out.println("received packet but pdu is null, packet.getData().length=" + packet.getData().length + ", error..."); + System.out.println("______________________________________________________"); + + ByteArrayInputStream bais = new ByteArrayInputStream(packet.getData()); +// DataInputStream dis = new DataInputStream(bais); + //float firstNumber = dis.readInt(); + //float secondNumber = dis.readInt(); + //float thirdNumber = dis.readInt(); + + + } + } + catch(IOException e) + { + System.out.println(e); + } + } + +} diff --git a/assignments/src/MV3500Cohort2021JulySeptember/projects/McneelyLeckieProject/McneelyLeckieSender.java b/assignments/src/MV3500Cohort2021JulySeptember/projects/McneelyLeckieProject/McneelyLeckieSender.java new file mode 100644 index 0000000000000000000000000000000000000000..366991a8232159603e1b2a2b5ddfd331e7af35ae --- /dev/null +++ b/assignments/src/MV3500Cohort2021JulySeptember/projects/McneelyLeckieProject/McneelyLeckieSender.java @@ -0,0 +1,200 @@ + +package MV3500Cohort2021JulySeptember.projects.McneelyLeckieProject; + +import edu.nps.moves.dis.CommentPdu; +import edu.nps.moves.dis.EntityStatePdu; +import edu.nps.moves.dis.OneByteChunk; +import edu.nps.moves.dis.Pdu; +import edu.nps.moves.dis.ResupplyOfferPdu; +import edu.nps.moves.dis.ResupplyReceivedPdu; +import edu.nps.moves.dis.ServiceRequestPdu; +import edu.nps.moves.dis.VariableDatum; +import edu.nps.moves.disenum.PduType; +import java.io.ByteArrayOutputStream; +import java.io.DataOutputStream; +import java.io.IOException; +import java.net.DatagramPacket; +import java.net.InetAddress; +import java.net.MulticastSocket; +import java.net.UnknownHostException; +import java.util.ArrayList; +import java.util.List; + + +/** + * + * @author Justin Mcneely + * @author Jacob Leckie + */ + + +public class McneelyLeckieSender { + + /** Default multicast group address we send on. */ + public static final String DEFAULT_MULTICAST_ADDRESS = "239.1.2.15"; + /** socket parameter of interest */ + public static final int DESTINATION_PORT = 1717; + /** Default multicast port used, matches Wire-shark DIS capture default */ + public static final int DEFAULT_MULTICAST_PORT = 3000; + + + private int port; + InetAddress multicastAddress; + + /** Object constructor + * @param port TCP port of interest + * @param multicast address of interest */ + public McneelyLeckieSender (int port, String multicast) + { + try + { + System.setProperty("java.net.preferIPv4Stack", "true"); + this.port = port; + multicastAddress = InetAddress.getByName(multicast); + //MulticastSocket multicastSocket = new MulticastSocket(1718); + //multicastSocket.setTimeToLive(TTL); + InetAddress multicastAddress = InetAddress.getByName(DEFAULT_MULTICAST_ADDRESS); + System.out.println(multicastAddress); + // Join group useful on receiving side + //multicastSocket.joinGroup(multicastAddress); + // You can join multiple groups here + if (!multicastAddress.isMulticastAddress()) + { + System.out.println("Not a multicast address: " + multicast); + } + } + catch (UnknownHostException e) { + System.out.println("Unable to open socket: " + e); + } + } + + /** + * Run the program + */ + @SuppressWarnings("deprecation") + public void run() + { + System.out.println("DisExamples.PduSender started..."); + try { + + List<Pdu> generatedPdus = new ArrayList<>(); + MulticastSocket multicastSocket = new MulticastSocket(1718); + //multicastSocket.setTimeToLive(TTL); + //InetAddress multicastAddress = InetAddress.getByName(MULTICAST_ADDRESS); + System.out.println(multicastAddress); + // Join group useful on receiving side + multicastSocket.joinGroup(multicastAddress); + // You can join multiple groups here + + // Loop through all the enumerated PDU types, create a PDU for each type, + // and add that PDU to a list. + for (PduType pdu : PduType.values()) { + Pdu aPdu = null; + + switch (pdu) // using enumeration values from edu.nps.moves.disenum.* + { + case ENTITY_STATE: + aPdu = new EntityStatePdu(); + break; + + case COMMENT: + aPdu = new CommentPdu(); + CommentPdu cPdu = (CommentPdu)aPdu; + + + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + + byte[] buffer; + buffer = baos.toByteArray(); + DatagramPacket packet = new DatagramPacket(buffer, buffer.length, multicastAddress, DESTINATION_PORT); +// System.out.println("Sending Request"); + for(int idx = 0; idx <= 6; idx++) + { + multicastSocket.send(packet); +// Thread.sleep(2000); // Send 100, one per second + System.out.println("Sending Request"); + System.out.println("Sent multicast DIS PDU packet " + idx + " of 6"); + } + ArrayList<VariableDatum> payload = new ArrayList<>(); + ArrayList<OneByteChunk> payloadWrapper = new ArrayList<>(); + VariableDatum variableDatum = new VariableDatum(); + + + + variableDatum.setVariableData(payloadWrapper); + + payload.add(variableDatum); + cPdu.setVariableDatums(payload); + break; + + case SERVICE_REQUEST: + aPdu = new ServiceRequestPdu(); + break; + + case RESUPPLY_OFFER: + aPdu = new ResupplyOfferPdu(); + break; + + case RESUPPLY_RECEIVED: + aPdu = new ResupplyReceivedPdu(); + break; + + default: +// System.out.print("PDU of type " + pdu + " not supported, created or sent "); +// System.out.println(); + } + if (aPdu != null) + { + generatedPdus.add(aPdu); + } + } + + // Sort the created PDUs by class name +// Collections.sort(generatedPdus, new ClassNameComparator()); + + + // Send the PDUs we created + InetAddress localMulticastAddress = InetAddress.getByName(DEFAULT_MULTICAST_ADDRESS); + MulticastSocket socket = new MulticastSocket(DEFAULT_MULTICAST_PORT); + socket.joinGroup(localMulticastAddress); + + for (int idx = 0; idx < generatedPdus.size(); idx++) + { + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + DataOutputStream dos = new DataOutputStream(baos); + byte[] buffer; + + Pdu aPdu = generatedPdus.get(idx); + + aPdu.marshal(dos); + + buffer = baos.toByteArray(); + DatagramPacket packet = new DatagramPacket(buffer, buffer.length, localMulticastAddress, DEFAULT_MULTICAST_PORT); + socket.send(packet); + System.out.println("Sent PDU of type " + aPdu.getClass().getName()); + } + + } catch (IOException e) + { + System.out.println(e); + } + } + + /** + * Program invocation, execution starts here + * @param args command-line arguments + */ + public static void main(String args[]) + { + if (args.length == 2) { + McneelyLeckieSender sender = new McneelyLeckieSender(Integer.parseInt(args[0]), args[1]); + sender.run(); + } else { + System.out.println("Usage: PduSender <port> <multicast group>"); + System.out.println("Default: PduSender " + DEFAULT_MULTICAST_PORT + " " + DEFAULT_MULTICAST_ADDRESS); + McneelyLeckieSender sender = new McneelyLeckieSender(DEFAULT_MULTICAST_PORT, DEFAULT_MULTICAST_ADDRESS); + sender.run(); + } + } + +} diff --git a/build.xml b/build.xml index 103f85e0c75ae452ae7caf99d9b252a48cbb3e68..ae60531d56c5442468cf4cc8caa6031d9be20631 100644 --- a/build.xml +++ b/build.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <!-- - Copyright (c) 1995-2020 held by the author(s). All rights reserved. + Copyright (c) 1995-2021 held by the author(s). All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions diff --git a/examples/build.xml b/examples/build.xml index 5c28ea240ef6384f58512fbbece3ada0e270e3ba..4020b94ea7f9bc4dbc3d30135bf96fd3067e26c0 100644 --- a/examples/build.xml +++ b/examples/build.xml @@ -19,13 +19,8 @@ <!-- invoke two-process tests next, perhaps following patterns in open-dis7-java --> </target> - <target name="clean.pduLogAdditions"> - <delete verbose="true"> - <fileset dir="pduLog"> - <include name="Pdusave*.dislog"/> - <exclude name="Pdusave.dislog"/><!-- version control default example --> - </fileset> - </delete> + <target name="clean.all.pduLogs"> + <ant dir="pduLog" antfile="build.xml" target="clean.all.pduLogs"/> </target> <!-- diff --git a/examples/pduLog/PduCaptureLog.dislog b/examples/pduLog/ExamplePduCaptureLog.dislog similarity index 100% rename from examples/pduLog/PduCaptureLog.dislog rename to examples/pduLog/ExamplePduCaptureLog.dislog diff --git a/examples/pduLog/PduCaptureLog1.dislog b/examples/pduLog/PduCaptureLog1.dislog deleted file mode 100644 index 0819b532f3ced4d284c3843aa3d6ee1e48d6dff0..0000000000000000000000000000000000000000 --- a/examples/pduLog/PduCaptureLog1.dislog +++ /dev/null @@ -1,23 +0,0 @@ -# Start, ENCODING_PLAINTEXT, 20210903_082535, DIS capture file, .\pduLog\PduCaptureLog1.dislog -[0,0,0,0,0,0,0,0],[7,1,1,1,109,38,47,15,0,-112,40,0,0,1,0,2,0,4,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 01 ENTITY_STATE -[0,0,0,0,5,122,27,116],[7,1,2,2,109,38,65,-77,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,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DisPduType 02 FIRE -[0,0,0,0,12,-95,88,-72],[7,1,22,5,109,60,-86,-109,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,0,-81,-46,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,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] # DisPduType 22 COMMENT -[0,0,0,0,18,-35,84,-4],[7,1,1,1,109,38,47,15,0,-112,40,0,0,0,0,0,0,0,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,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DisPduType 01 ENTITY_STATE -[0,0,0,0,84,-100,-100,-52],[7,1,1,1,109,38,47,15,0,-112,40,0,0,1,0,2,0,4,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 01 ENTITY_STATE -[0,0,0,0,91,22,8,-52],[7,1,2,2,109,38,65,-77,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,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DisPduType 02 FIRE -[0,0,0,0,97,-124,79,-84],[7,1,22,5,109,86,-64,-41,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,0,-81,-46,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,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] # DisPduType 22 COMMENT -[0,0,0,0,103,-18,27,72],[7,1,1,1,109,38,47,15,0,-112,40,0,0,0,0,0,0,0,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,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DisPduType 01 ENTITY_STATE -[0,0,0,0,-86,100,2,-88],[7,1,1,1,109,38,47,15,0,-112,40,0,0,1,0,2,0,4,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 01 ENTITY_STATE -[0,0,0,0,-80,-12,3,-24],[7,1,2,2,109,38,65,-77,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,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DisPduType 02 FIRE -[0,0,0,0,-73,90,9,-128],[7,1,22,5,109,112,-9,-71,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,0,-81,-46,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,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] # DisPduType 22 COMMENT -[0,0,0,0,-67,-55,29,16],[7,1,1,1,109,38,47,15,0,-112,40,0,0,0,0,0,0,0,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,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DisPduType 01 ENTITY_STATE -[0,0,0,1,0,21,43,-116],[7,1,1,1,109,38,47,15,0,-112,40,0,0,1,0,2,0,4,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 01 ENTITY_STATE -[0,0,0,1,6,-105,-33,-72],[7,1,2,2,109,38,65,-77,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,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DisPduType 02 FIRE -[0,0,0,1,13,12,-21,-52],[7,1,22,5,109,-117,37,73,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,0,-81,-46,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,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] # DisPduType 22 COMMENT -[0,0,0,1,19,-100,53,-40],[7,1,1,1,109,38,47,15,0,-112,40,0,0,0,0,0,0,0,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,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DisPduType 01 ENTITY_STATE -[0,0,0,1,86,99,-127,-16],[7,1,1,1,109,38,47,15,0,-112,40,0,0,1,0,2,0,4,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 01 ENTITY_STATE -[0,0,0,1,92,-51,-76,-84],[7,1,2,2,109,38,65,-77,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,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DisPduType 02 FIRE -[0,0,0,1,99,74,90,16],[7,1,22,5,109,-91,124,-51,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,0,-81,-46,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,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] # DisPduType 22 COMMENT -[0,0,0,1,105,-44,39,-48],[7,1,1,1,109,38,47,15,0,-112,40,0,0,0,0,0,0,0,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,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DisPduType 01 ENTITY_STATE -[0,0,0,1,112,75,107,120],[7,1,22,5,109,-87,116,-63,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] # DisPduType 22 COMMENT -# Finish, ENCODING_PLAINTEXT, 20210903_082542, DIS capture file, .\pduLog\PduCaptureLog1.dislog diff --git a/examples/pduLog/Readme.md b/examples/pduLog/README.md similarity index 100% rename from examples/pduLog/Readme.md rename to examples/pduLog/README.md diff --git a/examples/pduLog/build.xml b/examples/pduLog/build.xml new file mode 100644 index 0000000000000000000000000000000000000000..636c956f7acba0d3aa3a7c654c113174b7343550 --- /dev/null +++ b/examples/pduLog/build.xml @@ -0,0 +1,55 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 1995-2021 held by the author(s). All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer + in the documentation and/or other materials provided with the + distribution. + * Neither the names of the Naval Postgraduate School (NPS) + Modeling Virtual Environments and Simulation (MOVES) Institute + (https://www.nps.edu and https://www.MovesInstitute.org) + nor the names of its contributors may be used to endorse or + promote products derived from this software without specific + prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. +--> + +<!-- + Document : build.xml + Created on : 1 November 2017 + Author : Don Brutzman and Don McGregor + Description: Ant build.xml file for Networked Graphics MV3500 +--> +<project name="MV3500 pdu capture logs" default="all" basedir="."> + <description>Housekeeping for autogenerated PDU capture logs</description> + + <target name="clean.all.pduLogs" description="clean autogenerated PDU capture logs"> + <delete verbose="true"> + <fileset dir="."> + <include name="*.dislog"/> + <exclude name="ExamplePduCaptureLog.dislog"/><!-- version control default example --> + <exclude name="README.md"/> + </fileset> + </delete> + </target> + +</project> \ No newline at end of file diff --git a/presentations/10_TENA_References.md b/presentations/10_TENA_References.md index 474f6d4c69cf7b67ed0b74b0cf678a3676f751b7..31ae4f4b7fb1fda19b7146ab4314a692fb590bd1 100644 --- a/presentations/10_TENA_References.md +++ b/presentations/10_TENA_References.md @@ -2,6 +2,8 @@ # Test and Training Enabling Architecture (TENA) +TENA is Government Off The Shelf (GOTS) software supporting a wide range of Live Virtual Constructive (LVC) capability. + > "The OSD’s Test Resource Management Center (TRMC) Central Test and Evaluation > Investment Program (CTEIP) is developing and validating a common architecture and > requisite software to integrate testing, training, simulation, and high-performance computing technologies, distributed across many facilities. Through the establishment of a @@ -20,6 +22,8 @@ # Joint Mission Environment Test Capability (JMETC) +JMETC is the network connecting TENA-capable sites, such as DoD test ranges and laboratories. + > "The Joint Mission Environment Test Capability (JMETC) mission is to provide a > persistent capability for linking distributed facilities, > enabling DoD customers to develop and test warfighting capabilities in a Joint Context."