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

socket.joinGroup updated to include networkInterface

parent d6e2fc7b
No related branches found
No related tags found
No related merge requests found
examples/src/OpenDis4Examples/EspduSenderWireshark.png

120 KiB

...@@ -31,7 +31,13 @@ public class PduReceiver ...@@ -31,7 +31,13 @@ public class PduReceiver
System.out.println("OpenDis4Examples.PduReceiver started..."); System.out.println("OpenDis4Examples.PduReceiver started...");
socket = new MulticastSocket (MULTICAST_PORT); socket = new MulticastSocket (MULTICAST_PORT);
address = InetAddress.getByName(MULTICAST_GROUP); address = InetAddress.getByName(MULTICAST_GROUP);
socket.joinGroup(address); // socket.joinGroup(address); // deprecated
// =======================================================================
// new approach using interface
NetworkInterface networkInterface = NetworkInterface.getByInetAddress(address);
SocketAddress localMulticastSocketAddress = new InetSocketAddress(address, MULTICAST_PORT);
socket.joinGroup(localMulticastSocketAddress, networkInterface);
// =======================================================================
factory = new PduFactory(); factory = new PduFactory();
......
run: ant -f C:\\x-nps-gitlab\\NetworkedGraphicsMV3500\\examples -Dnb.internal.action.name=run.single -Djavac.includes=OpenDis4Examples/PduReceiver.java -Drun.class=OpenDis4Examples.PduReceiver run-single
DisExamples.PduReceiver started... init:
Deleting: C:\x-nps-gitlab\NetworkedGraphicsMV3500\examples\build\built-jar.properties
deps-jar:
Updating property file: C:\x-nps-gitlab\NetworkedGraphicsMV3500\examples\build\built-jar.properties
Compiling 1 source file to C:\x-nps-gitlab\NetworkedGraphicsMV3500\examples\build\classes
compile-single:
run-single:
OpenDis4Examples.PduReceiver started...
received DIS PDU: pduType 1 edu.nps.moves.dis.EntityStatePdu, protocolFamily 1 EntityInformationFamilyPdu received DIS PDU: pduType 1 edu.nps.moves.dis.EntityStatePdu, protocolFamily 1 EntityInformationFamilyPdu
received DIS PDU: pduType 2 edu.nps.moves.dis.FirePdu, protocolFamily 2 WarfareFamilyPdu received DIS PDU: pduType 2 edu.nps.moves.dis.FirePdu, protocolFamily 2 WarfareFamilyPdu
received DIS PDU: pduType 3 edu.nps.moves.dis.DetonationPdu, protocolFamily 2 WarfareFamilyPdu received DIS PDU: pduType 3 edu.nps.moves.dis.DetonationPdu, protocolFamily 2 WarfareFamilyPdu
......
package OpenDis4Examples; package OpenDis4Examples;
import java.io.*; import java.io.*;
import java.net.*; import java.net.*;
import java.util.*; import java.util.*;
import edu.nps.moves.dis.*; import edu.nps.moves.dis.*;
import edu.nps.moves.disenum.*; import edu.nps.moves.disenum.*;
import edu.nps.moves.examples.ClassNameComparator; import edu.nps.moves.examples.ClassNameComparator;
/** /**
* This is an example that sends many/most types of PDUs. Useful for testing standards * This is an example that sends many/most types of PDUs. Useful for testing standards
* compliance or getting a full set of PDUs. It also writes the generated PDUs to an XML file. * compliance or getting a full set of PDUs. It also writes the generated PDUs to an XML file.
* Adapted from OpenDIS library example package edu.nps.moves.examples * Adapted from OpenDIS library example package edu.nps.moves.examples
* *
* @author DMcG * @author DMcG
* @version $Id:$ * @version $Id:$
*/ */
public class PduSender public class PduSender
{ {
/** Default multicast group address we send on. /** Default multicast group address we send on.
* @see <a href="https://en.wikipedia.org/wiki/Multicast_address">https://en.wikipedia.org/wiki/Multicast_address</a> */ * @see <a href="https://en.wikipedia.org/wiki/Multicast_address">https://en.wikipedia.org/wiki/Multicast_address</a> */
private static final String DEFAULT_MULTICAST_ADDRESS = "239.1.2.3"; private static final String DEFAULT_MULTICAST_ADDRESS = "239.1.2.3";
/** Default multicast port used, matches Wireshark DIS capture default /** Default multicast port used, matches Wireshark DIS capture default
* @see <a href="https://en.wikipedia.org/wiki/Port_(computer_networking)">https://en.wikipedia.org/wiki/Port_(computer_networking)</a> */ * @see <a href="https://en.wikipedia.org/wiki/Port_(computer_networking)">https://en.wikipedia.org/wiki/Port_(computer_networking)</a> */
private static final int DEFAULT_MULTICAST_PORT = 3000; private static final int DEFAULT_MULTICAST_PORT = 3000;
private int port; private int port;
InetAddress multicastAddress; InetAddress multicastAddress;
/** Object constructor /** Object constructor
* @param port port of interest * @param port port of interest
* @param multicast address of interest */ * @param multicast address of interest */
public PduSender(int port, String multicast) { public PduSender(int port, String multicast) {
try try
{ {
this.port = port; this.port = port;
multicastAddress = InetAddress.getByName(multicast); multicastAddress = InetAddress.getByName(multicast);
if (!multicastAddress.isMulticastAddress()) if (!multicastAddress.isMulticastAddress())
{ {
System.out.println("Not a multicast address: " + multicast); System.out.println("Not a multicast address: " + multicast);
} }
} }
catch (UnknownHostException e) { catch (UnknownHostException e) {
System.out.println("Unable to open socket: " + e); System.out.println("Unable to open socket: " + e);
} }
} }
/** Begin operations */ /** Begin operations */
public void run() public void run()
{ {
System.out.println("OpenDis4Examples.PduSender started..."); System.out.println("OpenDis4Examples.PduSender started...");
try { try {
List<Pdu> generatedPdusList = new ArrayList<>(); List<Pdu> generatedPdusList = new ArrayList<>();
// Loop through all the enumerated PDU types, create a PDU for each type, // Loop through all the enumerated PDU types, create a PDU for each type,
// add that PDU to generatedPdusList, and send each one // add that PDU to generatedPdusList, and send each one
for (PduType pdu : PduType.values()) for (PduType pdu : PduType.values())
{ {
Pdu aPdu = null; // edu.​nps.​moves.​dis,PDU superclass for all PDUs, Pdu aPdu = null; // edu.​nps.​moves.​dis,PDU superclass for all PDUs,
switch (pdu) // using enumeration values from edu.nps.moves.disenum.* switch (pdu) // using enumeration values from edu.nps.moves.disenum.*
{ {
case ENTITY_STATE: case ENTITY_STATE:
aPdu = new EntityStatePdu(); aPdu = new EntityStatePdu();
EntityStatePdu espdu = (EntityStatePdu) aPdu; EntityStatePdu espdu = (EntityStatePdu) aPdu;
Marking marking = new Marking (); Marking marking = new Marking ();
marking.setCharactersString("PduSender"); // 11 characters max marking.setCharactersString("PduSender"); // 11 characters max
espdu.setMarking(marking); espdu.setMarking(marking);
Vector3Double espduLocation = new Vector3Double(); Vector3Double espduLocation = new Vector3Double();
espduLocation.setX(1.0); espduLocation.setX(1.0);
espduLocation.setY(2.0); espduLocation.setY(2.0);
espduLocation.setZ(3.0); espduLocation.setZ(3.0);
espdu.setEntityLocation(espduLocation); espdu.setEntityLocation(espduLocation);
// it is important to identify questions as you think of them // it is important to identify questions as you think of them
// TODO how to set azimuth, i.e. course direction over ground? // TODO how to set azimuth, i.e. course direction over ground?
break; break;
case COMMENT: case COMMENT:
aPdu = new CommentPdu(); aPdu = new CommentPdu();
CommentPdu newCommentPdu = (CommentPdu)aPdu; CommentPdu newCommentPdu = (CommentPdu)aPdu;
VariableDatum newVariableDatum = new VariableDatum(); VariableDatum newVariableDatum = new VariableDatum();
// etc. see Garrett and Pete's code // etc. see Garrett and Pete's code
break; break;
case FIRE: case FIRE:
aPdu = new FirePdu(); aPdu = new FirePdu();
break; break;
case DETONATION: case DETONATION:
aPdu = new DetonationPdu(); aPdu = new DetonationPdu();
break; break;
case COLLISION: case COLLISION:
aPdu = new CollisionPdu(); aPdu = new CollisionPdu();
break; break;
case SERVICE_REQUEST: case SERVICE_REQUEST:
aPdu = new ServiceRequestPdu(); aPdu = new ServiceRequestPdu();
break; break;
case RESUPPLY_OFFER: case RESUPPLY_OFFER:
aPdu = new ResupplyOfferPdu(); aPdu = new ResupplyOfferPdu();
break; break;
case RESUPPLY_RECEIVED: case RESUPPLY_RECEIVED:
aPdu = new ResupplyReceivedPdu(); aPdu = new ResupplyReceivedPdu();
break; break;
case RESUPPLY_CANCEL: case RESUPPLY_CANCEL:
aPdu = new ResupplyCancelPdu(); aPdu = new ResupplyCancelPdu();
break; break;
case REPAIR_COMPLETE: case REPAIR_COMPLETE:
aPdu = new RepairCompletePdu(); aPdu = new RepairCompletePdu();
break; break;
case REPAIR_RESPONSE: case REPAIR_RESPONSE:
aPdu = new RepairResponsePdu(); aPdu = new RepairResponsePdu();
break; break;
case CREATE_ENTITY: case CREATE_ENTITY:
aPdu = new CreateEntityPdu(); aPdu = new CreateEntityPdu();
break; break;
case REMOVE_ENTITY: case REMOVE_ENTITY:
aPdu = new RemoveEntityPdu(); aPdu = new RemoveEntityPdu();
break; break;
case START_RESUME: case START_RESUME:
aPdu = new StartResumePdu(); aPdu = new StartResumePdu();
break; break;
case STOP_FREEZE: case STOP_FREEZE:
aPdu = new StopFreezePdu(); aPdu = new StopFreezePdu();
break; break;
case ACKNOWLEDGE: case ACKNOWLEDGE:
aPdu = new AcknowledgePdu(); aPdu = new AcknowledgePdu();
break; break;
case ACTION_REQUEST: case ACTION_REQUEST:
aPdu = new ActionRequestPdu(); aPdu = new ActionRequestPdu();
break; break;
default: default:
System.out.print("PDU of type " + pdu + " not supported, created or sent "); System.out.print("PDU of type " + pdu + " not supported, created or sent ");
System.out.println(); System.out.println();
} }
if (aPdu != null) if (aPdu != null)
{ {
generatedPdusList.add(aPdu); generatedPdusList.add(aPdu);
} }
} }
// Sort the created PDUs by class name, if desired // Sort the created PDUs by class name, if desired
// Collections.sort(generatedPdusList, new ClassNameComparator()); // Collections.sort(generatedPdusList, new ClassNameComparator());
System.out.println("Send the " + generatedPdusList.size() + " PDUs we created..."); System.out.println("Send the " + generatedPdusList.size() + " PDUs we created...");
// Send the PDUs we created // Send the PDUs we created
InetAddress localMulticastAddress = InetAddress.getByName(DEFAULT_MULTICAST_ADDRESS); InetAddress localMulticastAddress = InetAddress.getByName(DEFAULT_MULTICAST_ADDRESS);
MulticastSocket socket = new MulticastSocket(DEFAULT_MULTICAST_PORT); MulticastSocket socket = new MulticastSocket(DEFAULT_MULTICAST_PORT);
socket.joinGroup(localMulticastAddress); // socket.joinGroup(localMulticastAddress); // deprecated, TODO select correct NetworkInterface
// =======================================================================
for (int idx = 0; idx < generatedPdusList.size(); idx++) // updated approach using NetworkInterface
{ NetworkInterface networkInterface = NetworkInterface.getByInetAddress(localMulticastAddress);
ByteArrayOutputStream baos = new ByteArrayOutputStream(); if (networkInterface != null)
DataOutputStream dos = new DataOutputStream(baos); System.out.println("networkInterface=" + networkInterface.getDisplayName()); // typically null if loopback
byte[] buffer; SocketAddress localMulticastSocketAddress = new InetSocketAddress(localMulticastAddress, DEFAULT_MULTICAST_PORT);
socket.joinGroup(localMulticastSocketAddress, networkInterface);
Pdu aPdu = generatedPdusList.get(idx); // =======================================================================
aPdu.marshal(dos);
for (int idx = 0; idx < generatedPdusList.size(); idx++)
buffer = baos.toByteArray(); {
DatagramPacket packet = new DatagramPacket(buffer, buffer.length, localMulticastAddress, DEFAULT_MULTICAST_PORT); ByteArrayOutputStream baos = new ByteArrayOutputStream();
socket.send(packet); DataOutputStream dos = new DataOutputStream(baos);
System.out.println("Sent PDU of type " + aPdu.getClass().getName()); byte[] buffer;
}
// write the PDUs out to an XML file. Pdu aPdu = generatedPdusList.get(idx);
//PduContainer container = new PduContainer(); aPdu.marshal(dos);
//container.setPdus(generatedPdus);
//container.marshallToXml("examplePdus.xml"); buffer = baos.toByteArray();
} catch (IOException e) DatagramPacket packet = new DatagramPacket(buffer, buffer.length, localMulticastAddress, DEFAULT_MULTICAST_PORT);
{ socket.send(packet);
System.out.println(e); System.out.println("Sent PDU of type " + aPdu.getClass().getName());
} }
} // write the PDUs out to an XML file.
//PduContainer container = new PduContainer();
/** //container.setPdus(generatedPdus);
* Program invocation, execution starts here //container.marshallToXml("examplePdus.xml");
* @param args command-line arguments } catch (IOException e)
*/ {
public static void main(String args[]) System.out.println(e);
{ }
if (args.length == 2) { }
PduSender sender = new PduSender(Integer.parseInt(args[0]), args[1]);
sender.run(); /**
} else { * Program invocation, execution starts here
System.out.println("Usage: PduSender <port> <multicast group>"); * @param args command-line arguments
System.out.println("Default: PduSender " + DEFAULT_MULTICAST_PORT + " " + DEFAULT_MULTICAST_ADDRESS); */
PduSender sender = new PduSender(DEFAULT_MULTICAST_PORT, DEFAULT_MULTICAST_ADDRESS); public static void main(String args[])
sender.run(); {
} if (args.length == 2) {
} PduSender sender = new PduSender(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);
PduSender sender = new PduSender(DEFAULT_MULTICAST_PORT, DEFAULT_MULTICAST_ADDRESS);
sender.run();
}
}
}
Invocation instructions: ant -f C:\\x-nps-gitlab\\NetworkedGraphicsMV3500\\examples -Dnb.internal.action.name=run.single -Djavac.includes=OpenDis4Examples/PduSender.java -Drun.class=OpenDis4Examples.PduSender run-single
1. run/debug PduSender.java init:
Deleting: C:\x-nps-gitlab\NetworkedGraphicsMV3500\examples\build\built-jar.properties
Program response: deps-jar:
Updating property file: C:\x-nps-gitlab\NetworkedGraphicsMV3500\examples\build\built-jar.properties
=================================================== Compiling 1 source file to C:\x-nps-gitlab\NetworkedGraphicsMV3500\examples\build\classes
run: compile-single:
Usage: PduSender <port> <multicast group> run-single:
Default: PduSender 3000 239.1.2.3 Usage: PduSender <port> <multicast group>
DisExamples.PduSender started... Default: PduSender 3000 239.1.2.3
PDU of type OTHER not supported, created or sent OpenDis4Examples.PduSender started...
PDU of type ACTION_RESPONSE not supported, created or sent PDU of type OTHER not supported, created or sent
PDU of type DATA_QUERY not supported, created or sent PDU of type ACTION_RESPONSE not supported, created or sent
PDU of type SET_DATA not supported, created or sent PDU of type DATA_QUERY not supported, created or sent
PDU of type DATA not supported, created or sent PDU of type SET_DATA not supported, created or sent
PDU of type EVENT_REPORT not supported, created or sent PDU of type DATA not supported, created or sent
PDU of type ELECTROMAGNETIC_EMISSION not supported, created or sent PDU of type EVENT_REPORT not supported, created or sent
PDU of type DESIGNATOR not supported, created or sent PDU of type ELECTROMAGNETIC_EMISSION not supported, created or sent
PDU of type TRANSMITTER not supported, created or sent PDU of type DESIGNATOR not supported, created or sent
PDU of type SIGNAL not supported, created or sent PDU of type TRANSMITTER not supported, created or sent
PDU of type RECEIVER not supported, created or sent PDU of type SIGNAL not supported, created or sent
PDU of type IFF_ATC_NAVAIDS not supported, created or sent PDU of type RECEIVER not supported, created or sent
PDU of type UNDERWATER_ACOUSTIC not supported, created or sent PDU of type IFF_ATC_NAVAIDS not supported, created or sent
PDU of type SUPPLEMENTAL_EMISSION_ENTITY_STATE not supported, created or sent PDU of type UNDERWATER_ACOUSTIC not supported, created or sent
PDU of type INTERCOM_SIGNAL not supported, created or sent PDU of type SUPPLEMENTAL_EMISSION_ENTITY_STATE not supported, created or sent
PDU of type INTERCOM_CONTROL not supported, created or sent PDU of type INTERCOM_SIGNAL not supported, created or sent
PDU of type AGGREGATE_STATE not supported, created or sent PDU of type INTERCOM_CONTROL not supported, created or sent
PDU of type ISGROUPOF not supported, created or sent PDU of type AGGREGATE_STATE not supported, created or sent
PDU of type TRANSFER_CONTROL not supported, created or sent PDU of type ISGROUPOF not supported, created or sent
PDU of type ISPARTOF not supported, created or sent PDU of type TRANSFER_CONTROL not supported, created or sent
PDU of type MINEFIELD_STATE not supported, created or sent PDU of type ISPARTOF not supported, created or sent
PDU of type MINEFIELD_QUERY not supported, created or sent PDU of type MINEFIELD_STATE not supported, created or sent
PDU of type MINEFIELD_DATA not supported, created or sent PDU of type MINEFIELD_QUERY not supported, created or sent
PDU of type MINEFIELD_RESPONSE_NAK not supported, created or sent PDU of type MINEFIELD_DATA not supported, created or sent
PDU of type ENVIRONMENTAL_PROCESS not supported, created or sent PDU of type MINEFIELD_RESPONSE_NAK not supported, created or sent
PDU of type GRIDDED_DATA not supported, created or sent PDU of type ENVIRONMENTAL_PROCESS not supported, created or sent
PDU of type POINT_OBJECT_STATE not supported, created or sent PDU of type GRIDDED_DATA not supported, created or sent
PDU of type LINEAR_OBJECT_STATE not supported, created or sent PDU of type POINT_OBJECT_STATE not supported, created or sent
PDU of type AREAL_OBJECT_STATE not supported, created or sent PDU of type LINEAR_OBJECT_STATE not supported, created or sent
PDU of type TSPI not supported, created or sent PDU of type AREAL_OBJECT_STATE not supported, created or sent
PDU of type APPEARANCE not supported, created or sent PDU of type TSPI not supported, created or sent
PDU of type ARTICULATED_PARTS not supported, created or sent PDU of type APPEARANCE not supported, created or sent
PDU of type LE_FIRE not supported, created or sent PDU of type ARTICULATED_PARTS not supported, created or sent
PDU of type LE_DETONATION not supported, created or sent PDU of type LE_FIRE not supported, created or sent
PDU of type CREATE_ENTITY_R not supported, created or sent PDU of type LE_DETONATION not supported, created or sent
PDU of type REMOVE_ENTITY_R not supported, created or sent PDU of type CREATE_ENTITY_R not supported, created or sent
PDU of type START_RESUME_R not supported, created or sent PDU of type REMOVE_ENTITY_R not supported, created or sent
PDU of type STOP_FREEZE_R not supported, created or sent PDU of type START_RESUME_R not supported, created or sent
PDU of type ACKNOWLEDGE_R not supported, created or sent PDU of type STOP_FREEZE_R not supported, created or sent
PDU of type ACTION_REQUEST_R not supported, created or sent PDU of type ACKNOWLEDGE_R not supported, created or sent
PDU of type ACTION_RESPONSE_R not supported, created or sent PDU of type ACTION_REQUEST_R not supported, created or sent
PDU of type DATA_QUERY_R not supported, created or sent PDU of type ACTION_RESPONSE_R not supported, created or sent
PDU of type SET_DATA_R not supported, created or sent PDU of type DATA_QUERY_R not supported, created or sent
PDU of type DATA_R not supported, created or sent PDU of type SET_DATA_R not supported, created or sent
PDU of type EVENT_REPORT_R not supported, created or sent PDU of type DATA_R not supported, created or sent
PDU of type COMMENT_R not supported, created or sent PDU of type EVENT_REPORT_R not supported, created or sent
PDU of type RECORD_R not supported, created or sent PDU of type COMMENT_R not supported, created or sent
PDU of type SET_RECORD_R not supported, created or sent PDU of type RECORD_R not supported, created or sent
PDU of type RECORD_QUERY_R not supported, created or sent PDU of type SET_RECORD_R not supported, created or sent
PDU of type COLLISION_ELASTIC not supported, created or sent PDU of type RECORD_QUERY_R not supported, created or sent
PDU of type ENTITY_STATE_UPDATE not supported, created or sent PDU of type COLLISION_ELASTIC not supported, created or sent
Send the 17 PDUs we created... PDU of type ENTITY_STATE_UPDATE not supported, created or sent
Sent PDU of type edu.nps.moves.dis.EntityStatePdu Send the 17 PDUs we created...
Sent PDU of type edu.nps.moves.dis.FirePdu Sent PDU of type edu.nps.moves.dis.EntityStatePdu
Sent PDU of type edu.nps.moves.dis.DetonationPdu Sent PDU of type edu.nps.moves.dis.FirePdu
Sent PDU of type edu.nps.moves.dis.CollisionPdu Sent PDU of type edu.nps.moves.dis.DetonationPdu
Sent PDU of type edu.nps.moves.dis.ServiceRequestPdu Sent PDU of type edu.nps.moves.dis.CollisionPdu
Sent PDU of type edu.nps.moves.dis.ResupplyOfferPdu Sent PDU of type edu.nps.moves.dis.ServiceRequestPdu
Sent PDU of type edu.nps.moves.dis.ResupplyReceivedPdu Sent PDU of type edu.nps.moves.dis.ResupplyOfferPdu
Sent PDU of type edu.nps.moves.dis.ResupplyCancelPdu Sent PDU of type edu.nps.moves.dis.ResupplyReceivedPdu
Sent PDU of type edu.nps.moves.dis.RepairCompletePdu Sent PDU of type edu.nps.moves.dis.ResupplyCancelPdu
Sent PDU of type edu.nps.moves.dis.RepairResponsePdu Sent PDU of type edu.nps.moves.dis.RepairCompletePdu
Sent PDU of type edu.nps.moves.dis.CreateEntityPdu Sent PDU of type edu.nps.moves.dis.RepairResponsePdu
Sent PDU of type edu.nps.moves.dis.RemoveEntityPdu Sent PDU of type edu.nps.moves.dis.CreateEntityPdu
Sent PDU of type edu.nps.moves.dis.StartResumePdu Sent PDU of type edu.nps.moves.dis.RemoveEntityPdu
Sent PDU of type edu.nps.moves.dis.StopFreezePdu Sent PDU of type edu.nps.moves.dis.StartResumePdu
Sent PDU of type edu.nps.moves.dis.AcknowledgePdu Sent PDU of type edu.nps.moves.dis.StopFreezePdu
Sent PDU of type edu.nps.moves.dis.ActionRequestPdu Sent PDU of type edu.nps.moves.dis.AcknowledgePdu
Sent PDU of type edu.nps.moves.dis.CommentPdu Sent PDU of type edu.nps.moves.dis.ActionRequestPdu
BUILD SUCCESSFUL (total time: 1 second) Sent PDU of type edu.nps.moves.dis.CommentPdu
BUILD SUCCESSFUL (total time: 2 seconds)
examples/src/OpenDis4Examples/PduSenderWireshark.png

116 KiB

# DIS Protocol Examples using Open-DIS-4 Java Library # DIS Protocol Examples using Open-DIS-4 Java Library
*Note:* these examples demonstrate an earlier version of Open-DIS-Java Library. Please work with current version [OpenDis7Examples](../OpenDis7Examples) instead. *Note:* these archived examples demonstrate an earlier version of Open-DIS-Java Library.
Please work with current version [OpenDis7Examples](../OpenDis7Examples) instead.
--- ---
......
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