Skip to content
Snippets Groups Projects
Commit b1a0e067 authored by bkii's avatar bkii
Browse files

Homework 4, Knobeloch

Unable to create EntityType
Country? Domain? Category?

Besides that, works fine: Creates 5 new EntityStatePDUs and sends them with ONE thread. On the other side, all PDUs are received well.
parent 9b861501
No related branches found
No related tags found
No related merge requests found
package MV3500Cohort2019JulySeptember.homework4.Knobeloch;
import java.net.*;
import java.io.*;
import edu.nps.moves.dis7.*;
import edu.nps.moves.dis7.enumerations.*;
import edu.nps.moves.dis7.util.*;
public class Knobeloch_PduReceiver
{
public static final int DEFAULT_MULTICAST_PORT = Knobeloch_PduSender.DEFAULT_MULTICAST_PORT;
public static final String DEFAULT_MULTICAST_ADDRESS = Knobeloch_PduSender.DEFAULT_MULTICAST_ADDRESS;
public static final boolean USE_FAST_ESPDU = false;
public static void main(String args[])
{
PduFactory factory;
MulticastSocket socket;
InetAddress address;
DatagramPacket packet;
try {
System.out.println("Knobeloch_PduReceiver started...");
if (args.length == 2) {
socket = new MulticastSocket(Integer.parseInt(args[0]));
address = InetAddress.getByName(args[1]);
}
else {
System.out.println("Usage: AllPduReceiver <port> <multicast group>");
System.out.println("Default: AllPduReceiver " + DEFAULT_MULTICAST_PORT + " " + DEFAULT_MULTICAST_ADDRESS);
socket = new MulticastSocket(DEFAULT_MULTICAST_PORT);
address = InetAddress.getByName(DEFAULT_MULTICAST_ADDRESS);
}
socket.joinGroup(address);
factory = new PduFactory();
while (true) // Loop infinitely, receiving datagrams
{
byte buffer[] = new byte[1500]; // typical MTU size
packet = new DatagramPacket(buffer, buffer.length); // reset
socket.receive(packet);
Pdu pdu = factory.createPdu(packet.getData());
if (pdu != null) {
DISPDUType currentPduType = pdu.getPduType(); //short currentPduType = pdu.getPduType();
String currentPduTypeName = pdu.getClass().getName();
DISProtocolFamily currentProtocolFamilyID = pdu.getProtocolFamily(); //short currentProtocolFamilyID = pdu.getProtocolFamily();
//String currentPduFamilyName = pdu.getClass().getSuperclass().getSimpleName();
StringBuilder message = new StringBuilder();
message.append("received DIS PDU ");
if (currentPduType.getValue() < 10)
message.append(" ");
message.append(currentPduType.getValue());
String currentPduTypePadded = String.format("%-34s", currentPduType); // - indicates right padding of whitespace
message.append(" " ).append(currentPduTypePadded);
String currentPduTypeNamePadded = String.format("%-49s", currentPduTypeName); // - indicates right padding of whitespace
message.append(" of type ").append(currentPduTypeNamePadded); // package.class name
message.append(" (protocolFamily ").append(currentProtocolFamilyID);
// message.append(" ").append(currentPduFamilyName); // class name is also available
message.append(")");
System.out.println(message.toString());
}
else
System.out.println("received packet but pdu is null, packet.getData().length=" + packet.getData().length + ", error...");
}
}
catch (IOException e) {
System.out.println("Problem with Knobeloch_PduReceiver, see exception trace:");
System.out.println(e);
}
finally {
System.out.println("Knobeloch_PduReceiver complete.");
}
}
}
package MV3500Cohort2019JulySeptember.homework4.Knobeloch;
import java.io.*;
import java.net.*;
import java.util.*;
import edu.nps.moves.dis7.*;
import edu.nps.moves.dis7.enumerations.*;
/**
* 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.
* Adapted from OpenDIS library example package edu.nps.moves.examples
*
* @author DMcG
* @version $Id:$
*/
public class Knobeloch_PduSender
{
/** Default multicast group address we send on. */
public static final String DEFAULT_MULTICAST_ADDRESS = "239.1.2.3";
/** Default multicast port used, matches Wireshark DIS capture default */
public static final int DEFAULT_MULTICAST_PORT = 3000;
private int port;
InetAddress multicastAddress;
public Knobeloch_PduSender(int port, String multicast) {
try
{
this.port = port;
multicastAddress = InetAddress.getByName(multicast);
if (!multicastAddress.isMulticastAddress())
{
System.out.println("Not a multicast address: " + multicast);
}
}
catch (UnknownHostException e) {
System.out.println("Unable to open socket: " + e);
}
}
public void run(int numbOfPDUS)
{
System.out.println("DisExamplesOpenDis7.AllPduSender started...");
System.out.println("Generate PDUs and note issues, if any...");
List<Pdu> generatedPdusList = createPDU(numbOfPDUS);
// Send the PDUs we created
System.out.println("Send the " + generatedPdusList.size() + " PDUs we created...");
try
{
InetAddress localMulticastAddress = InetAddress.getByName(DEFAULT_MULTICAST_ADDRESS);
MulticastSocket socket = new MulticastSocket(DEFAULT_MULTICAST_PORT);
socket.joinGroup(localMulticastAddress);
for (int idx = 0; idx < generatedPdusList.size(); idx++)
{
ByteArrayOutputStream baos = new ByteArrayOutputStream();
DataOutputStream dos = new DataOutputStream(baos);
byte[] buffer;
Pdu aPdu = generatedPdusList.get(idx);
aPdu.marshal(dos);
buffer = baos.toByteArray();
DatagramPacket packet = new DatagramPacket(buffer, buffer.length, localMulticastAddress, DEFAULT_MULTICAST_PORT);
socket.send(packet);
try {
Thread.sleep(100L);
} catch (InterruptedException ex) {
}
String currentPduTypeValuePadded = String.format("%2s", aPdu.getPduType().getValue());
String currentPduTypePadded = String.format("%-34s", aPdu.getPduType()); // - indicates right padding of whitespace
System.out.print ("Sent DIS PDU " + currentPduTypeValuePadded + " " + currentPduTypePadded );
System.out.println(" of type " + aPdu.getClass().getName());
}
}
catch (IOException e)
{
System.out.println(e);
}
}
public static void main(String args[])
{
if (args.length == 2)
{
Knobeloch_PduSender sender = new Knobeloch_PduSender(Integer.parseInt(args[0]), args[1]);
sender.run(5);
}
else
{
System.out.println("Usage: AllPduSender <port> <multicast group>");
System.out.println("Default: AllPduSender " + DEFAULT_MULTICAST_PORT + " " + DEFAULT_MULTICAST_ADDRESS);
Knobeloch_PduSender sender = new Knobeloch_PduSender(DEFAULT_MULTICAST_PORT, DEFAULT_MULTICAST_ADDRESS);
sender.run(5);
}
System.out.println("Knobeloch_PduSender complete.");
}
private List<Pdu> createPDU(int numbOfPDUs)
{
List<Pdu> list = new ArrayList<>();
List<Short> entityIDs = new ArrayList<>();
Random r = new Random();
//generate Entity ID (no douplications)
for (int i = 0; i < numbOfPDUs; i++)
{
short temp = (short) r.nextInt();
while (entityIDs.contains(temp))
{
temp = (short) r.nextInt();
}
entityIDs.add(temp);
}
//
for (int i = 0; i < numbOfPDUs; i++){
EntityStatePdu myPdu = new EntityStatePdu();
//ID
EntityID tempID = new EntityID();
tempID.setEntityID(entityIDs.get(i));
myPdu.setEntityID(tempID);
//Enemy or Friend
myPdu.setForceId(ForceID.FRIENDLY);
//location
Vector3Double tempLoc = new Vector3Double();
tempLoc.setX(r.nextInt(1000) + r.nextDouble());
tempLoc.setY(r.nextInt(1000) + r.nextDouble());
tempLoc.setZ(r.nextInt(1000) + r.nextDouble());
myPdu.setEntityLocation(tempLoc);
//orientation
EulerAngles tempOri = new EulerAngles();
tempOri.setPhi(r.nextFloat());
tempOri.setPsi(r.nextFloat());
tempOri.setTheta(r.nextFloat());
myPdu.setEntityOrientation(tempOri);
//velocity
Vector3Double tempVel = new Vector3Double();
tempVel.setX(r.nextDouble());
tempVel.setY(r.nextDouble());
tempVel.setZ(r.nextDouble());
myPdu.setEntityLocation(tempVel);
// Category? Country? Domain?...
// EntityType tempType = new EntityType();
// tempType.set
// myPdu.setEntityType(tempType)
list.add(myPdu);
}
return list;
}
}
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