Skip to content
Snippets Groups Projects
AllPduReceiver.java 3.99 KiB
package MV3500Cohort2019JulySeptember.homework4.Fetterolf;

import java.net.*;
import java.io.*;

import edu.nps.moves.dis7.*;
import edu.nps.moves.dis7.enumerations.*;
import edu.nps.moves.dis7.util.*;
import java.util.ArrayList;

public class AllPduReceiver
{
  public static final int DEFAULT_MULTICAST_PORT = AllPduSender.DEFAULT_MULTICAST_PORT;
  public static final String DEFAULT_MULTICAST_ADDRESS = AllPduSender.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("DisExamplesOpenDis7.AllPduReceiver 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(" "); // column spacing
            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());

            switch (currentPduType) // using enumeration values from edu.​nps.​moves.​dis7.​enumerations.​DISPDUType
            {
                case COMMENT:
                    CommentPdu commentPdu = (CommentPdu)pdu; // cast to precise type
                    ArrayList<VariableDatum> payloadList = (ArrayList)commentPdu.getVariableDatums();
                    for (VariableDatum variableDatum : payloadList)
                    {
                        String nextComment = new String(variableDatum.getVariableDatumValue()); // convert byte[] to String
                        System.out.println("\"" + nextComment + "\"");
                    }
            }
        }
        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 DisExamplesOpenDis7.AllPduReceiver, see exception trace:");
      System.out.println(e);
    }
    finally {
      System.out.println("DisExamplesOpenDis7.AllPduReceiver complete.");
    }
  }
}