package MV3500Cohort2018JanuaryMarch.homework2;




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

/**
 * homework assignment
 */
public class AngelMulticastReceiver {

    /** socket value of shared interest */
    public static final String MULTICAST_ADDRESS = "239.1.2.15";
    /** socket value of shared interest */
    public static final int DESTINATION_PORT = 1717;
    /** How many routers can be crossed */
    static final int TTL = 10; 
    
    /** run the program
     * @param args command-line arguments, string parameters (unused) */
    @SuppressWarnings("deprecation")
    public static void main(String[] args) 
    {
        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");
            
            
            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
            while(true)
            {
                byte[] packetArray = new byte[1500];
                DatagramPacket packet = new DatagramPacket(packetArray, packetArray.length);
                multicastSocket.receive(packet);
                ByteArrayInputStream bais = new ByteArrayInputStream(packet.getData());
                DataInputStream dis = new DataInputStream(bais);
                char type = dis.readChar();
                if (type == 'A') {
                    float firstNumber = dis.readFloat();
                    float secondNumber = dis.readFloat();
                    float thirdNumber = dis.readFloat();
                    System.out.println("Abrams POS: (x: " + firstNumber + ", y: " + secondNumber +", z: " + thirdNumber + " )");    
                }
                if (type == 'B') {
                    int lngth = dis.readInt();
                    String informationLine = "";
                    for(int i=0; i<lngth; i++) {
                        informationLine += dis.readChar();
                    }
                    System.out.println(informationLine);
                }
            }   
        }
        catch(Exception e)
        {
            System.out.println(e);
        }
    }
    
}