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