Please review any and all PUBLIC repositories, groups, and associated files. These allow anyone on the Internet to access without authentication. Repository and group owners are responsible for their content and permission settings. Go to your project(s), click on Settings > General and expand the "Visibility, project features, permissions" to change this setting.

Commit 637b8cff authored by J. M. Bailey's avatar J. M. Bailey
Browse files

First commit

parents
<?xml version="1.0" encoding="UTF-8"?>
<!-- You may freely edit this file. See commented blocks below for -->
<!-- some examples of how to customize the build. -->
<!-- (If you delete it and reopen the project it will be recreated.) -->
<!-- By default, only the Clean and Build commands use this build script. -->
<!-- Commands such as Run, Debug, and Test only use this build script if -->
<!-- the Compile on Save feature is turned off for the project. -->
<!-- You can turn off the Compile on Save (or Deploy on Save) setting -->
<!-- in the project's Project Properties dialog box.-->
<project name="Lab3" default="default" basedir=".">
<description>Builds, tests, and runs the project Lab3.</description>
<import file="nbproject/build-impl.xml"/>
<!--
There exist several targets which are by default empty and which can be
used for execution of your tasks. These targets are usually executed
before and after some main targets. They are:
-pre-init: called before initialization of project properties
-post-init: called after initialization of project properties
-pre-compile: called before javac compilation
-post-compile: called after javac compilation
-pre-compile-single: called before javac compilation of single file
-post-compile-single: called after javac compilation of single file
-pre-compile-test: called before javac compilation of JUnit tests
-post-compile-test: called after javac compilation of JUnit tests
-pre-compile-test-single: called before javac compilation of single JUnit test
-post-compile-test-single: called after javac compilation of single JUunit test
-pre-jar: called before JAR building
-post-jar: called after JAR building
-post-clean: called after cleaning build products
(Targets beginning with '-' are not intended to be called on their own.)
Example of inserting an obfuscator after compilation could look like this:
<target name="-post-compile">
<obfuscate>
<fileset dir="${build.classes.dir}"/>
</obfuscate>
</target>
For list of available properties check the imported
nbproject/build-impl.xml file.
Another way to customize the build is by overriding existing main targets.
The targets of interest are:
-init-macrodef-javac: defines macro for javac compilation
-init-macrodef-junit: defines macro for junit execution
-init-macrodef-debug: defines macro for class debugging
-init-macrodef-java: defines macro for class execution
-do-jar: JAR building
run: execution of project
-javadoc-build: Javadoc generation
test-report: JUnit report generation
An example of overriding the target for project execution could look like this:
<target name="run" depends="Lab3-impl.jar">
<exec dir="bin" executable="launcher.exe">
<arg file="${dist.jar}"/>
</exec>
</target>
Notice that the overridden target depends on the jar target and not only on
the compile target as the regular run target does. Again, for a list of available
properties which you can use, check the target you are overriding in the
nbproject/build-impl.xml file.
-->
</project>
Manifest-Version: 1.0
X-COMMENT: Main-Class will be added automatically by build
This diff is collapsed.
main.class=mv4503.lab3.MainMulticast
build.xml.data.CRC32=bdae2487
build.xml.script.CRC32=133dbf10
build.xml.stylesheet.CRC32=8064a381@1.80.1.48
# This file is used by a NetBeans-based IDE to track changes in generated files such as build-impl.xml.
# Do not edit this file. You may delete it but then the IDE will never regenerate such files for you.
nbproject/build-impl.xml.data.CRC32=bdae2487
nbproject/build-impl.xml.script.CRC32=db7a9adf
nbproject/build-impl.xml.stylesheet.CRC32=830a3534@1.80.1.48
annotation.processing.enabled=true
annotation.processing.enabled.in.editor=false
annotation.processing.processors.list=
annotation.processing.run.all.processors=true
annotation.processing.source.output=${build.generated.sources.dir}/ap-source-output
application.title=Lab3
application.vendor=mike
build.classes.dir=${build.dir}/classes
build.classes.excludes=**/*.java,**/*.form
# This directory is removed when the project is cleaned:
build.dir=build
build.generated.dir=${build.dir}/generated
build.generated.sources.dir=${build.dir}/generated-sources
# Only compile against the classpath explicitly listed here:
build.sysclasspath=ignore
build.test.classes.dir=${build.dir}/test/classes
build.test.results.dir=${build.dir}/test/results
# Uncomment to specify the preferred debugger connection transport:
#debug.transport=dt_socket
debug.classpath=\
${run.classpath}
debug.test.classpath=\
${run.test.classpath}
# Files in build.classes.dir which should be excluded from distribution jar
dist.archive.excludes=
# This directory is removed when the project is cleaned:
dist.dir=dist
dist.jar=${dist.dir}/Lab3.jar
dist.javadoc.dir=${dist.dir}/javadoc
endorsed.classpath=
excludes=
file.reference.dis-enums_1.1.jar=/Users/mike/open-dis/dis-enums_1.1.jar
file.reference.hamcrest-all-1.3.jar=/Users/mike/open-dis/hamcrest-all-1.3.jar
file.reference.junit-4.12.jar=/Users/mike/open-dis/junit-4.12.jar
file.reference.open-dis_4.16.jar=/Users/mike/open-dis/open-dis_4.16.jar
file.reference.srm_4.4.0.jar=/Users/mike/open-dis/srm_4.4.0.jar
includes=**
jar.compress=false
javac.classpath=\
${file.reference.dis-enums_1.1.jar}:\
${file.reference.hamcrest-all-1.3.jar}:\
${file.reference.junit-4.12.jar}:\
${file.reference.open-dis_4.16.jar}:\
${file.reference.srm_4.4.0.jar}
# Space-separated list of extra javac options
javac.compilerargs=
javac.deprecation=false
javac.external.vm=true
javac.processorpath=\
${javac.classpath}
javac.source=1.8
javac.target=1.8
javac.test.classpath=\
${javac.classpath}:\
${build.classes.dir}
javac.test.processorpath=\
${javac.test.classpath}
javadoc.additionalparam=
javadoc.author=false
javadoc.encoding=${source.encoding}
javadoc.noindex=false
javadoc.nonavbar=false
javadoc.notree=false
javadoc.private=false
javadoc.splitindex=true
javadoc.use=true
javadoc.version=false
javadoc.windowtitle=
main.class=mv4503.lab3.Main
manifest.file=manifest.mf
meta.inf.dir=${src.dir}/META-INF
mkdist.disabled=false
platform.active=default_platform
run.classpath=\
${javac.classpath}:\
${build.classes.dir}
# Space-separated list of JVM arguments used when running the project.
# You may also define separate properties like run-sys-prop.name=value instead of -Dname=value.
# To set system properties for unit tests define test-sys-prop.name=value:
run.jvmargs=
run.test.classpath=\
${javac.test.classpath}:\
${build.test.classes.dir}
source.encoding=UTF-8
src.dir=src
test.src.dir=test
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://www.netbeans.org/ns/project/1">
<type>org.netbeans.modules.java.j2seproject</type>
<configuration>
<data xmlns="http://www.netbeans.org/ns/j2se-project/3">
<name>Lab3</name>
<source-roots>
<root id="src.dir"/>
</source-roots>
<test-roots>
<root id="test.src.dir"/>
</test-roots>
</data>
</configuration>
</project>
package mv4503.lab3;
import edu.nps.moves.dis.EntityID;
import edu.nps.moves.dis.EntityStatePdu;
import edu.nps.moves.dis.EntityType;
import edu.nps.moves.dis.Vector3Double;
import edu.nps.moves.disutil.CoordinateConversions;
import edu.nps.moves.disutil.DisTime;
import java.io.ByteArrayOutputStream;
import java.io.DataOutputStream;
import java.net.*;
import java.util.*;
public class Lab3
{
private static final int DIS_PORT = 3000;
public static void main(String[] args)
{
try {
List<InetAddress> addresses = findOurSubnetBroadcastAddresses();
EntityStatePdu espdu = new EntityStatePdu();
espdu.setExerciseID((short)1); // Exercise ID
EntityID entityID = espdu.getEntityID();
entityID.setSite(1); // Site #
entityID.setApplication(1); //Application
entityID.setEntity(2); //Entity id
EntityType entityType = espdu.getEntityType();
entityType.setEntityKind((short)1); // Platform (vs lifeform, munition, sensor, etc.)
entityType.setCountry(255); // USA
entityType.setDomain((short)1); // Land (vs air, surface, subsurface, space)
entityType.setCategory((short)1); // Tank
entityType.setSubcategory((short)1); // M1 Abrams
entityType.setSpec((short)3); // M1A2 Abrams
// Set time
espdu.setTimestamp(DisTime.getInstance().getDisAbsoluteTimestamp());
// Set location
double lat = 36.596620; // Coordinates for Herrmann Hall
double lon = -121.873627;
double[] coords = CoordinateConversions.getXYZfromLatLonDegrees(lat, lon, 1.0d);
Vector3Double location = espdu.getEntityLocation();
location.setX(coords[0]);
location.setY(coords[1]);
location.setZ(coords[2]);
// turn object into byte stream
ByteArrayOutputStream baos = new ByteArrayOutputStream();
DataOutputStream dos = new DataOutputStream(baos);
espdu.marshal(dos);
byte[] data = baos.toByteArray();
DatagramSocket socket= new DatagramSocket();
socket.setBroadcast(true);
for (InetAddress addr : addresses) {
// load byte buffer into packet and send
System.out.println("sending to "+addr.getHostAddress());
DatagramPacket packet = new DatagramPacket(data, data.length, addr, DIS_PORT);
socket.send(packet);
System.out.println("ESPDU datagram sent.");
}
socket.close();
}
catch (Exception ex) {
System.out.println("Exception creating/sending DIS pdu: " + ex.getMessage());
}
}
private static List<InetAddress> findOurSubnetBroadcastAddresses() throws Exception
{
/* Go through the interfaces on this machine and return the first non-null broadcast address found */
List<InetAddress> broadcastList = new ArrayList<>();
Enumeration<NetworkInterface> interfaces = NetworkInterface.getNetworkInterfaces();
while (interfaces.hasMoreElements()) {
NetworkInterface networkInterface = interfaces.nextElement();
if (networkInterface.isLoopback() || !networkInterface.isUp())
continue;
List<InterfaceAddress> list = networkInterface.getInterfaceAddresses();
for(InterfaceAddress ia : list) {
InetAddress bcaddr = ia.getBroadcast();
if(bcaddr != null) {
broadcastList.add(bcaddr);
System.out.println("Broadcasting PDUs to " + bcaddr.toString());
}
}
}
if (broadcastList.isEmpty())
throw new Exception("No broadcast addresses found.");
return broadcastList;
}
}
package mv4503.lab3;
import edu.nps.moves.dis.EntityID;
import edu.nps.moves.dis.EntityStatePdu;
import edu.nps.moves.dis.EntityType;
import edu.nps.moves.dis.Vector3Double;
import edu.nps.moves.disutil.CoordinateConversions;
import edu.nps.moves.disutil.DisTime;
import java.io.ByteArrayOutputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.*;
import java.util.Enumeration;
public class Lab3Multicast
{
private static final int DIS_PORT = 3000;
private static final String MCAST_GROUP = "230.0.0.0";
public static void main(String[] args)
{
try {
EntityStatePdu espdu = new EntityStatePdu();
espdu.setExerciseID((short)1); // Exercise ID
// These are example values
EntityID entityID = espdu.getEntityID();
entityID.setSite(1); // Site #
entityID.setApplication(1); //Application
entityID.setEntity(2); //Entity id
EntityType entityType = espdu.getEntityType();
entityType.setEntityKind((short)1); // Platform (vs lifeform, munition, sensor, etc.)
entityType.setCountry(255); // USA
entityType.setDomain((short)1); // Land (vs air, surface, subsurface, space)
entityType.setCategory((short)1); // Tank
entityType.setSubcategory((short)1); // M1 Abrams
entityType.setSpec((short)3); // M1A2 Abrams
// Set time
espdu.setTimestamp(DisTime.getInstance().getDisAbsoluteTimestamp());
// Set location
double lat = 36.596620; // Coordinates for Herrmann Hall
double lon = -121.873627;
double[] coords = CoordinateConversions.getXYZfromLatLonDegrees(lat, lon, 1.0d);
Vector3Double location = espdu.getEntityLocation();
location.setX(coords[0]);
location.setY(coords[1]);
location.setZ(coords[2]);
// turn object into byte stream
ByteArrayOutputStream baos = new ByteArrayOutputStream();
DataOutputStream dos = new DataOutputStream(baos);
espdu.marshal(dos);
byte[] data = baos.toByteArray();
MulticastSocket msocket = new MulticastSocket();
InetAddress maddr = InetAddress.getByName(MCAST_GROUP);
// load byte buffer into packet and send
DatagramPacket packet = new DatagramPacket(data, data.length, maddr, DIS_PORT);
msocket.setNetworkInterface(findIp4Interface());
System.out.println("sending to "+maddr.getHostAddress()+":"+DIS_PORT);
msocket.send(packet);
System.out.println("ESPDU datagram sent");
msocket.close();
}
catch (IOException ex) {
System.out.println("Exception creating/sending DIS pdu: " + ex.getMessage());
}
}
/* find proper interface */
private static NetworkInterface findIp4Interface() throws SocketException
{
Enumeration<NetworkInterface> ifaces = NetworkInterface.getNetworkInterfaces();
while (ifaces.hasMoreElements()) {
NetworkInterface nif = ifaces.nextElement();
Enumeration<InetAddress> addresses = nif.getInetAddresses();
while (addresses.hasMoreElements()) {
InetAddress addr = addresses.nextElement();
if (addr instanceof Inet4Address && !addr.isLoopbackAddress()) {
System.out.println("Using network interface "+nif.getDisplayName());
return nif;
}
}
}
return null;
}
}
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment