Skip to content
Snippets Groups Projects
PduReceiver.java 2.94 KiB
package OpenDis7Examples;

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 PduReceiver 
{
    public static final int     DEFAULT_MULTICAST_PORT    = PduSender.DEFAULT_MULTICAST_PORT;
    public static final String  DEFAULT_MULTICAST_ADDRESS = PduSender.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.PduReceiver started...");
            if (args.length == 2)
            {
                socket  = new MulticastSocket  (Integer.parseInt(args[0]));
                address = InetAddress.getByName(args[1]);
            } 
            else
            {
                System.out.println("Usage:   PduReceiver <port> <multicast group>");
                System.out.println("Default: PduReceiver " + 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)
				{
					short  currentPduType          = pdu.getPduType();
					String currentPduTypeName      = pdu.getClass().getName();
					short  currentProtocolFamilyID = pdu.getProtocolFamily();
					String currentPduFamilyName    = pdu.getClass().getSuperclass().getSimpleName();
					
					StringBuilder message = new StringBuilder();
					message.append("received DIS PDU: ");
					message.append("pduType ");
					if (currentPduType < 10)
						message.append(" ");
					message.append(currentPduType).append(" ").append(currentPduTypeName);
					message.append(", protocolFamily ").append(currentProtocolFamilyID);
					message.append(" ").append(currentPduFamilyName);
				    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.PduReceiver, see exception trace:");
            System.out.println(e);
        }
        finally
        {
            System.out.println("DisExamplesOpenDis7.PduReceiver complete.");
        }
    }
}