Skip to content
Snippets Groups Projects
Commit df2f0b6b authored by User's avatar User
Browse files

Change 1

parent b364f3bf
No related branches found
No related tags found
No related merge requests found
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.DataInputStream;
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...");
MulticastSocket socket = new MulticastSocket (MULTICAST_PORT);
InetAddress address = InetAddress.getByName(MULTICAST_GROUP);
socket.joinGroup(address);
factory = new PduFactory();
int count = 0;
int secondNumber = 67;
int thirdNumber = 108;
int forkliftsAvail = 12;
int forkliftsServ = 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){
forkliftsAvail-=1;
forkliftsServ+=1;
}
System.out.println("Marine Aircraft Logistics Squadron 29: Wolverines!");
System.out.println("Order received: " + count + " NSN ID: 1874542689" + " Xrow: " + secondNumber + " Yshelf: "+ thirdNumber +
" Forklifts Availble: " + forkliftsAvail + " Forklifts in Service: " +forkliftsServ);
System.out.println("______________________________________________________");
StringBuilder message = new StringBuilder();
message.append("received DIS PDU: ");
message.append("pduType ");
if (pduType <= 10)
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...");
ByteArrayInputStream bais = new ByteArrayInputStream(packet.getData());
DataInputStream dis = new DataInputStream(bais);
//float firstNumber = dis.readInt();
//float secondNumber = dis.readInt();
//float thirdNumber = dis.readInt();
}
}
catch(Exception e)
{
System.out.println(e);
}
}
}
package MV3500Cohort2021JulySeptember.projects.McneelyLeckieProject;
import edu.nps.moves.dis.AcknowledgePdu;
import edu.nps.moves.dis.ActionRequestPdu;
import edu.nps.moves.dis.CommentPdu;
import edu.nps.moves.dis.CreateEntityPdu;
import edu.nps.moves.dis.EntityStatePdu;
import edu.nps.moves.dis.OneByteChunk;
import edu.nps.moves.dis.Pdu;
import edu.nps.moves.dis.RemoveEntityPdu;
import edu.nps.moves.dis.RepairCompletePdu;
import edu.nps.moves.dis.RepairResponsePdu;
import edu.nps.moves.dis.ResupplyCancelPdu;
import edu.nps.moves.dis.ResupplyOfferPdu;
import edu.nps.moves.dis.ResupplyReceivedPdu;
import edu.nps.moves.dis.ServiceRequestPdu;
import edu.nps.moves.dis.StartResumePdu;
import edu.nps.moves.dis.StopFreezePdu;
import edu.nps.moves.dis.VariableDatum;
import edu.nps.moves.disenum.PduType;
import edu.nps.moves.examples.ClassNameComparator;
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.Collections;
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 < 12; idx++)
{
multicastSocket.send(packet);
//Thread.sleep(1000); // Send 100, one per second
System.out.println("Sending Request");
System.out.println("Sent multicast DIS PDU packet " + idx + " of 12");
}
ArrayList<VariableDatum> payload = new ArrayList<VariableDatum>();
ArrayList<OneByteChunk> payloadWrapper = new ArrayList<OneByteChunk>();
VariableDatum variableDatum = new VariableDatum();
variableDatum.setVariableData(payloadWrapper);
payload.add(variableDatum);
cPdu.setVariableDatums(payload);
break;
// case FIRE:
// aPdu = new FirePdu();
// break;
//
// case DETONATION:
// aPdu = new DetonationPdu();
// break;
//
// case COLLISION:
// aPdu = new CollisionPdu();
// break;
case SERVICE_REQUEST:
aPdu = new ServiceRequestPdu();
break;
case RESUPPLY_OFFER:
aPdu = new ResupplyOfferPdu();
break;
case RESUPPLY_RECEIVED:
aPdu = new ResupplyReceivedPdu();
break;
case RESUPPLY_CANCEL:
aPdu = new ResupplyCancelPdu();
break;
case REPAIR_COMPLETE:
aPdu = new RepairCompletePdu();
break;
case REPAIR_RESPONSE:
aPdu = new RepairResponsePdu();
break;
case CREATE_ENTITY:
aPdu = new CreateEntityPdu();
break;
case REMOVE_ENTITY:
aPdu = new RemoveEntityPdu();
break;
case START_RESUME:
aPdu = new StartResumePdu();
break;
case STOP_FREEZE:
aPdu = new StopFreezePdu();
break;
case ACKNOWLEDGE:
aPdu = new AcknowledgePdu();
break;
case ACTION_REQUEST:
aPdu = new ActionRequestPdu();
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();
}
}
}
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