Skip to content
Snippets Groups Projects
McneelyLeckieReceiver.java 6.50 KiB


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);
        }
    }
    
}