Skip to content
Snippets Groups Projects
AllPduReceiver.java 3.24 KiB
package MV3500Cohort2019JulySeptember.homework4.Yurkovich;

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 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(" ");
          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 DisExamplesOpenDis7.AllPduReceiver, see exception trace:");
      System.out.println(e);
    }
    finally {
      System.out.println("DisExamplesOpenDis7.AllPduReceiver complete.");
    }
  }
}