From d7bc6cf576daa2f36108b023b43c7c003b9a27d8 Mon Sep 17 00:00:00 2001
From: bkii <bkii@10.0.0.123>
Date: Wed, 11 Sep 2019 17:19:44 -0700
Subject: [PATCH] Almost done

---
 .../BRE_KNO_MCC/AllPduReceiver.java           |  95 --------
 .../BRE_KNO_MCC/AllPduSender.java             | 152 -------------
 .../BRE_KNO_MCC_PC1_MCAST_PduSender.java      | 214 +++++++-----------
 .../BRE_KNO_MCC_PC2_Controller.java           |  70 +++---
 ...BRE_KNO_MCC_PC2_PC3_UNICAST_PduSender.java |  57 +++--
 ...E_KNO_MCC_PC3_PC2_UNICAST_PduReceiver.java |  44 ++--
 6 files changed, 162 insertions(+), 470 deletions(-)
 delete mode 100644 assignments/src/MV3500Cohort2019JulySeptember/homework2/Brennenstuhl/BRE_KNO_MCC/AllPduReceiver.java
 delete mode 100755 assignments/src/MV3500Cohort2019JulySeptember/homework2/Brennenstuhl/BRE_KNO_MCC/AllPduSender.java

diff --git a/assignments/src/MV3500Cohort2019JulySeptember/homework2/Brennenstuhl/BRE_KNO_MCC/AllPduReceiver.java b/assignments/src/MV3500Cohort2019JulySeptember/homework2/Brennenstuhl/BRE_KNO_MCC/AllPduReceiver.java
deleted file mode 100644
index c934694a72..0000000000
--- a/assignments/src/MV3500Cohort2019JulySeptember/homework2/Brennenstuhl/BRE_KNO_MCC/AllPduReceiver.java
+++ /dev/null
@@ -1,95 +0,0 @@
-package MV3500Cohort2019JulySeptember.homework2.Brennenstuhl.BRE_KNO_MCC;
-
-import MV3500Cohort2019JulySeptember.homework4.Brennenstuhl.test.*;
-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.");
-    }
-  }
-}
diff --git a/assignments/src/MV3500Cohort2019JulySeptember/homework2/Brennenstuhl/BRE_KNO_MCC/AllPduSender.java b/assignments/src/MV3500Cohort2019JulySeptember/homework2/Brennenstuhl/BRE_KNO_MCC/AllPduSender.java
deleted file mode 100755
index ad0d8ec079..0000000000
--- a/assignments/src/MV3500Cohort2019JulySeptember/homework2/Brennenstuhl/BRE_KNO_MCC/AllPduSender.java
+++ /dev/null
@@ -1,152 +0,0 @@
-package MV3500Cohort2019JulySeptember.homework2.Brennenstuhl.BRE_KNO_MCC;
-
-import MV3500Cohort2019JulySeptember.homework4.Brennenstuhl.test.*;
-import java.io.*;
-import java.net.*;
-import java.util.*;
-
-import edu.nps.moves.dis7.*;
-import edu.nps.moves.dis7.enumerations.*;
-
-/**
- * This is an example that sends many/most types of PDUs. Useful for testing standards
- * compliance or getting a full set of PDUs. It also writes the generated PDUs to an XML file.
- * Adapted from OpenDIS library example package edu.nps.moves.examples
- *
- * @author DMcG
- * @version $Id:$
- */
-public class AllPduSender
-{
-    /** Default multicast group address we send on. */
-    public static final String DEFAULT_MULTICAST_ADDRESS = "239.1.2.3";
-	
-    /** Default multicast port used, matches Wireshark DIS capture default */
-    public static final int    DEFAULT_MULTICAST_PORT    = 3000;
-	
-    private int port;
-    InetAddress multicastAddress;
-
-    public AllPduSender(int port, String multicast) {
-        try
-		{
-            this.port = port;
-            multicastAddress = InetAddress.getByName(multicast);
-            if (!multicastAddress.isMulticastAddress())
-			{
-                System.out.println("Not a multicast address: " + multicast);
-            }
-        } 
-		catch (UnknownHostException e) {
-            System.out.println("Unable to open socket: " + e);
-        }
-    }
-
-    public void run()
-	{
-
-        try
-        {
-            System.out.println("Generate PDUs and note issues, if any...");
-            List<Pdu> generatedPdusList = new ArrayList<>();
-
-            // Loop through all the enumerated PDU types, create a PDU for each type,
-            // add that PDU to generatedPdusList, and send each one
-          
-//                System.out.println("PDU " + pdu.getValue() + " " + pdu.name() + " " + pdu.getDescription()); // diagnostic
-
-                Pdu aPdu = null; // edu.​nps.​moves7.​dis.PDU superclass for all PDUs, in preparation for custom assignment
-                
-  
-
-                        
-                   
-                            
-                            //***************************************************************************                           
-                            CommentPdu    newCommentPdu = new CommentPdu();
-                            ArrayList<VariableDatum> payloadList = new ArrayList<VariableDatum>();
-                            
-                            ArrayList<String> commentsList = new ArrayList<>();
-                            commentsList.add("Hello CommentPDU");
-                            commentsList.add("Chuck Norris is comming to town from IP-Adress " + DEFAULT_MULTICAST_ADDRESS + " with Port " + DEFAULT_MULTICAST_PORT);
-                            
-                            if (!commentsList.isEmpty())
-                                System.out.println("Preparing CommentPDU:");
-
-                            for (String comment : commentsList)
-                            {
-                                VariableDatum newVariableDatum = new VariableDatum();
-                                newVariableDatum.setVariableDatumValue (comment.getBytes());        // conversion
-                                //newVariableDatum.setVariableDatumLength(comment.getBytes().length  * 8); // bits, not bytes, see spec and javadoc
-                                // alternatively, you do not need to set this and the marshaller will figure it out from the byte array
-                                // (see javadoc for VariableDatum.setVariableDatumLength())
-                                payloadList.add(newVariableDatum);
-                                System.out.println("   \"" + comment + "\"");
-                            }
-                            newCommentPdu.setVariableDatums(payloadList);
-                            
-                            aPdu = newCommentPdu; // hand off for sending
-                            //*****************************************************************************
-                       
-                            generatedPdusList.add(aPdu);
-
-
-            InetAddress localMulticastAddress = InetAddress.getByName(DEFAULT_MULTICAST_ADDRESS);
-            MulticastSocket socket = new MulticastSocket(DEFAULT_MULTICAST_PORT);
-            socket.joinGroup(localMulticastAddress);
-
-            for (int idx = 0; idx < generatedPdusList.size(); idx++)
-			{
-                ByteArrayOutputStream baos = new ByteArrayOutputStream();
-                DataOutputStream dos = new DataOutputStream(baos);
-                byte[] buffer;
-
-                aPdu = generatedPdusList.get(idx);
-                try 
-                {
-                    aPdu.marshal(dos);
-
-                    buffer = baos.toByteArray();
-                    DatagramPacket packet = new DatagramPacket(buffer, buffer.length, localMulticastAddress, DEFAULT_MULTICAST_PORT);
-                    socket.send(packet);
-                    try {
-                        Thread.sleep(100L);
-                    } catch (InterruptedException ex) {
-                    }
-                    String currentPduTypeValuePadded = String.format("%2s", aPdu.getPduType().getValue());
-                    String currentPduTypePadded = String.format("%-34s", aPdu.getPduType()); // - indicates right padding of whitespace
-                    System.out.print  ("Sent DIS PDU " + currentPduTypeValuePadded + " " + currentPduTypePadded );
-                    System.out.println(" of type " + aPdu.getClass().getName());
-                } 
-                catch (Exception ex) {
-                    System.out.println("Marshaling error" + ex);
-                }
-            }
-            // write the PDUs out to an XML file.
-            //PduContainer container = new PduContainer();
-            //container.setPdus(generatedPdus);
-            //container.marshallToXml("examplePdus.xml");
-        }
-        catch (IOException e)
-		{
-            System.out.println(e);
-        }
-    }
-
-    public static void main(String args[])
-	{
-        if (args.length == 2)
-        {
-            AllPduSender sender = new AllPduSender(Integer.parseInt(args[0]), args[1]);
-            sender.run();
-        } 
-        else
-        {
-            System.out.println("Usage:   AllPduSender <port> <multicast group>");
-            System.out.println("Default: AllPduSender  " + DEFAULT_MULTICAST_PORT + "   " + DEFAULT_MULTICAST_ADDRESS);
-            AllPduSender sender = new  AllPduSender(DEFAULT_MULTICAST_PORT, DEFAULT_MULTICAST_ADDRESS);
-            sender.run();
-        }
-        System.out.println("DisExamplesOpenDis7.AllPduSender complete.");
-    }
-}
diff --git a/assignments/src/MV3500Cohort2019JulySeptember/homework2/Brennenstuhl/BRE_KNO_MCC/BRE_KNO_MCC_PC1_MCAST_PduSender.java b/assignments/src/MV3500Cohort2019JulySeptember/homework2/Brennenstuhl/BRE_KNO_MCC/BRE_KNO_MCC_PC1_MCAST_PduSender.java
index 8cb5ac2f80..4c1fb2bcae 100755
--- a/assignments/src/MV3500Cohort2019JulySeptember/homework2/Brennenstuhl/BRE_KNO_MCC/BRE_KNO_MCC_PC1_MCAST_PduSender.java
+++ b/assignments/src/MV3500Cohort2019JulySeptember/homework2/Brennenstuhl/BRE_KNO_MCC/BRE_KNO_MCC_PC1_MCAST_PduSender.java
@@ -5,174 +5,112 @@ import java.net.*;
 import java.util.*;
 
 import edu.nps.moves.dis7.*;
-import edu.nps.moves.dis7.enumerations.*;
 import java.util.logging.Level;
 import java.util.logging.Logger;
 
-/**
- * This is an example that sends many/most types of PDUs. Useful for testing standards
- * compliance or getting a full set of PDUs. It also writes the generated PDUs to an XML file.
- * Adapted from OpenDIS library example package edu.nps.moves.examples
- *
- * @author DMcG
- * @version $Id:$
- */
 public class BRE_KNO_MCC_PC1_MCAST_PduSender
 {
-    /** Default multicast group address we send on. */
+
     public static final String DEFAULT_MULTICAST_ADDRESS = "239.1.2.3";
-	
-    /** Default multicast port used, matches Wireshark DIS capture default */
-    public static final int    DEFAULT_MULTICAST_PORT    = 2342;
-	
-    private int port;
-    InetAddress multicastAddress;
-
-    public BRE_KNO_MCC_PC1_MCAST_PduSender(int port, String multicast) {
-        try
-		{
-            this.port = port;
-            multicastAddress = InetAddress.getByName(multicast);
-            if (!multicastAddress.isMulticastAddress())
-			{
-                System.out.println("Not a multicast address: " + multicast);
-            }
-        } 
-		catch (UnknownHostException e) {
-            System.out.println("Unable to open socket: " + e);
-        }
-    }
+    public static final int DEFAULT_MULTICAST_PORT = 2342;
 
+    static boolean keepRunning = true;
+    
+    
     public void run(int numbOfPDUS)
     {
-	System.out.println("BRE_KNO_MCC_PC1_MCAST_PduSender started...");
+        System.out.println("BRE_KNO_MCC_PC1_MCAST_PduSender started...");
         System.out.println("Generate PDUs and note issues, if any...");
+        int senderIntervall = 0;
         
-        List<Pdu> generatedPdusList = createPDU(numbOfPDUS);
-          
-        // Send the PDUs we created
-        System.out.println("Send the " + generatedPdusList.size() + " PDUs we created...");
+        while (keepRunning){
+            List<Pdu> generatedPdusList = createPDU(numbOfPDUS, senderIntervall);
 
-        try
-        {
-            InetAddress localMulticastAddress = InetAddress.getByName(DEFAULT_MULTICAST_ADDRESS);
-            MulticastSocket socket = new MulticastSocket(DEFAULT_MULTICAST_PORT);
-            socket.joinGroup(localMulticastAddress);
+            // Send the PDUs we created
+            System.out.println("Send the " + generatedPdusList.size() + " PDUs we created...");
 
-            for (int idx = 0; idx < generatedPdusList.size(); idx++)
+            try
             {
-                ByteArrayOutputStream baos = new ByteArrayOutputStream();
-                DataOutputStream dos = new DataOutputStream(baos);
-                byte[] buffer;
-
-                Pdu aPdu = generatedPdusList.get(idx);
-                try {
-                    aPdu.marshal(dos);
-                } catch (Exception ex) {
-                    Logger.getLogger(BRE_KNO_MCC_PC1_MCAST_PduSender.class.getName()).log(Level.SEVERE, null, ex);
-                }
+                InetAddress localMulticastAddress = InetAddress.getByName(DEFAULT_MULTICAST_ADDRESS);
+                MulticastSocket socket = new MulticastSocket(DEFAULT_MULTICAST_PORT);
+                socket.joinGroup(localMulticastAddress);
+
+                for (int idx = 0; idx < generatedPdusList.size(); idx++)
+                {
+                    ByteArrayOutputStream baos = new ByteArrayOutputStream();
+                    DataOutputStream dos = new DataOutputStream(baos);
+                    byte[] buffer;
 
-                buffer = baos.toByteArray();
-                DatagramPacket packet = new DatagramPacket(buffer, buffer.length, localMulticastAddress, DEFAULT_MULTICAST_PORT);
-                socket.send(packet);
-                try {
-                    Thread.sleep(100L);
-                } catch (InterruptedException ex) {
+                    Pdu aPdu = generatedPdusList.get(idx);
+                    try
+                    {
+                        aPdu.marshal(dos);
+                    }
+                    catch (Exception ex)
+                    {
+                        Logger.getLogger(BRE_KNO_MCC_PC1_MCAST_PduSender.class.getName()).log(Level.SEVERE, null, ex);
+                    }
+
+                    buffer = baos.toByteArray();
+                    DatagramPacket packet = new DatagramPacket(buffer, buffer.length, localMulticastAddress, DEFAULT_MULTICAST_PORT);
+                    socket.send(packet);
+                    try
+                    {
+                        Thread.sleep(100L);
+                    }
+                    catch (InterruptedException ex)
+                    {
+                    }
                 }
-                String currentPduTypeValuePadded = String.format("%2s", aPdu.getPduType().getValue());
-                String currentPduTypePadded = String.format("%-34s", aPdu.getPduType()); // - indicates right padding of whitespace
-                System.out.print  ("Sent DIS PDU " + currentPduTypeValuePadded + " " + currentPduTypePadded );
-                System.out.println(" of type " + aPdu.getClass().getName());
             }
-        }            
-        catch (IOException e)
-	{
-            System.out.println(e);
+            catch (IOException e)
+            {
+                System.out.println(e);
+            }
+            
+            senderIntervall++;
+            try
+            {
+                Thread.sleep(2000);
+            }
+            catch (InterruptedException ex)
+            {
+                Logger.getLogger(BRE_KNO_MCC_PC1_MCAST_PduSender.class.getName()).log(Level.SEVERE, null, ex);
+            }
         }
     }
 
     public static void main(String args[])
     {
-        if (args.length == 2)
-        {
-            BRE_KNO_MCC_PC1_MCAST_PduSender sender = new BRE_KNO_MCC_PC1_MCAST_PduSender(Integer.parseInt(args[0]), args[1]);
-            sender.run(5);
-        } 
-        else
-        {
-            System.out.println("Usage:   BRE_KNO_MCC_PC1_MCAST_PduSender <port> <multicast group>");
-            System.out.println("Default: BRE_KNO_MCC_PC1_MCAST_PduSender  " + DEFAULT_MULTICAST_PORT + "   " + DEFAULT_MULTICAST_ADDRESS);
-            BRE_KNO_MCC_PC1_MCAST_PduSender sender = new  BRE_KNO_MCC_PC1_MCAST_PduSender(DEFAULT_MULTICAST_PORT, DEFAULT_MULTICAST_ADDRESS);
-            sender.run(5);
-        }
-        System.out.println("BRE_KNO_MCC_PC1_MCAST_PduSender complete.");
+        BRE_KNO_MCC_PC1_MCAST_PduSender sender = new BRE_KNO_MCC_PC1_MCAST_PduSender();
+        sender.run(5);
     }
-    
-    private List<Pdu> createPDU(int numbOfPDUs)
+
+    private List<Pdu> createPDU(int numbOfPDUs, int intervall)
     {
-        List<Pdu> list = new ArrayList<>();
-        List<Short> entityIDs = new ArrayList<>();        
-        Random r = new Random();
-        
-        //generate Entity ID (no douplications)        
+        List<Pdu> list = new ArrayList();
+            
         for (int i = 0; i < numbOfPDUs; i++)
         {
-            short temp = (short) r.nextInt();        
-            while (entityIDs.contains(temp))
+            CommentPdu newCommentPdu = new CommentPdu();
+            ArrayList<VariableDatum> payloadList = new ArrayList<VariableDatum>();
+
+            ArrayList<String> commentsList = new ArrayList<>();
+            commentsList.add("Chuck Norris is comming to tow! " + "Warning " + i+1 + intervall*5);
+
+            for (String comment : commentsList)
             {
-                temp = (short) r.nextInt();
+                VariableDatum newVariableDatum = new VariableDatum();
+                newVariableDatum.setVariableDatumValue(comment.getBytes());
+                payloadList.add(newVariableDatum);
             }
-            entityIDs.add(temp);
-        }
-        
-        //
-        for (int i = 0; i < numbOfPDUs; i++){
-            EntityStatePdu myPdu = new EntityStatePdu();
-            
-            //ID
-            EntityID tempID = new EntityID();
-            tempID.setEntityID(entityIDs.get(i));
-            myPdu.setEntityID(tempID);
-            
-            //Enemy or Friend
-            myPdu.setForceId(ForceID.FRIENDLY);
-            
-            //location
-            Vector3Double tempLoc = new Vector3Double();
-            tempLoc.setX(r.nextInt(1000) + r.nextDouble());
-            tempLoc.setY(r.nextInt(1000) + r.nextDouble());
-            tempLoc.setZ(r.nextInt(1000) + r.nextDouble());
-            
-            myPdu.setEntityLocation(tempLoc);
-            
-            //orientation
-            EulerAngles tempOri = new EulerAngles();
-            tempOri.setPhi(r.nextFloat());
-            tempOri.setPsi(r.nextFloat());
-            tempOri.setTheta(r.nextFloat());
-            
-            myPdu.setEntityOrientation(tempOri);
-            
-            
-            //velocity
-            Vector3Double tempVel = new Vector3Double();
-            tempVel.setX(r.nextDouble());
-            tempVel.setY(r.nextDouble());
-            tempVel.setZ(r.nextDouble());
-            
-            myPdu.setEntityLocation(tempVel);
-            
-            
-//            Category? Country? Domain?...
-//            EntityType tempType = new EntityType();
-//            tempType.set
-//            myPdu.setEntityType(tempType)
+            newCommentPdu.setVariableDatums(payloadList);
+            newCommentPdu.setTimestamp(42 + i + intervall*5);
 
-            list.add(myPdu);
+            Pdu aPdu = newCommentPdu;
+            list.add(aPdu);
         }
-        
-               
+
         return list;
     }
 }
-
diff --git a/assignments/src/MV3500Cohort2019JulySeptember/homework2/Brennenstuhl/BRE_KNO_MCC/BRE_KNO_MCC_PC2_Controller.java b/assignments/src/MV3500Cohort2019JulySeptember/homework2/Brennenstuhl/BRE_KNO_MCC/BRE_KNO_MCC_PC2_Controller.java
index 26236f9d39..9a6456ed50 100644
--- a/assignments/src/MV3500Cohort2019JulySeptember/homework2/Brennenstuhl/BRE_KNO_MCC/BRE_KNO_MCC_PC2_Controller.java
+++ b/assignments/src/MV3500Cohort2019JulySeptember/homework2/Brennenstuhl/BRE_KNO_MCC/BRE_KNO_MCC_PC2_Controller.java
@@ -1,67 +1,73 @@
 package MV3500Cohort2019JulySeptember.homework2.Brennenstuhl.BRE_KNO_MCC;
 
+import edu.nps.moves.dis7.CommentPdu;
 import edu.nps.moves.dis7.Pdu;
+import edu.nps.moves.dis7.VariableDatum;
 import java.net.InetAddress;
 import java.net.UnknownHostException;
+import java.util.ArrayList;
 import java.util.List;
 import java.util.logging.Level;
 import java.util.logging.Logger;
 
-public class BRE_KNO_MCC_PC2_Controller {
-    
+public class BRE_KNO_MCC_PC2_Controller
+{
+
     static boolean keepRunningMainThread = false;
     static BRE_KNO_MCC_PC2_PC1_MCAST_PduReceiver pc2_pc1_receiver;
     static BRE_KNO_MCC_PC2_PC3_UNICAST_PduSender pc2_pc3_sender;
-    
+
     static InetAddress mcastIPPC1;
-    static InetAddress mcastIPPC3;
+    static InetAddress ipPC3;
     static int portPC1;
     static int portPC3;
-    
-    public void main(String[] args) throws UnknownHostException {
-        
-        mcastIPPC1 = InetAddress.getByName("239.1.2.3"); 
-        portPC1 = 2342;  
-        
-        mcastIPPC3 = InetAddress.getByName("239.1.2.3"); 
-        portPC3 = 2343;
-        
-        
+
+    public static void main(String[] args) throws UnknownHostException
+    {
+
+        mcastIPPC1 = InetAddress.getByName("239.1.2.3");
+        portPC1 = 2342;
+
+        ipPC3 = InetAddress.getByName("172.20.156.94");
+        portPC3 = 1719;
+
         pc2_pc1_receiver = new BRE_KNO_MCC_PC2_PC1_MCAST_PduReceiver();
         pc2_pc1_receiver.resetMcastMessagesToSend();
         pc2_pc1_receiver.resetSavedMCASTMessagesList();
         pc2_pc1_receiver.setKeepRunning(true); //use this to terminate thread instead of killing it by hard
         pc2_pc1_receiver.run(mcastIPPC1, portPC1);
-        
-        
+
         pc2_pc3_sender = new BRE_KNO_MCC_PC2_PC3_UNICAST_PduSender();
-        
 
         //start main thread
         keepRunningMainThread = true;
         run();
-    }   
-    
-    
-    public static void run() {
-    
-        while (keepRunningMainThread){
-            
-            List<Pdu> tempSet = pc2_pc1_receiver.getMCASTMessagesToSend();            
-            if (tempSet != null && !tempSet.isEmpty() )
+    }
+
+    public static void run()
+    {
+
+        while (keepRunningMainThread)
+        {
+            List<Pdu> tempSet = pc2_pc1_receiver.getMCASTMessagesToSend();
+            if (tempSet != null && !tempSet.isEmpty())
             {
                 pc2_pc3_sender.setKeepRunning(true);
                 pc2_pc3_sender.setListToSend(tempSet);
-                
-                if(pc2_pc3_sender.isRunning()){
-                    
-                }                
+
+                if (!pc2_pc3_sender.isRunning())
+                {
+                    pc2_pc3_sender.run(ipPC3, portPC3);
+                }
             }
             else
             {
-                try {
+                try
+                {
                     Thread.sleep(2000);
-                } catch (InterruptedException ex) {
+                }
+                catch (InterruptedException ex)
+                {
                     Logger.getLogger(BRE_KNO_MCC_PC2_Controller.class.getName()).log(Level.SEVERE, null, ex);
                 }
             }
diff --git a/assignments/src/MV3500Cohort2019JulySeptember/homework2/Brennenstuhl/BRE_KNO_MCC/BRE_KNO_MCC_PC2_PC3_UNICAST_PduSender.java b/assignments/src/MV3500Cohort2019JulySeptember/homework2/Brennenstuhl/BRE_KNO_MCC/BRE_KNO_MCC_PC2_PC3_UNICAST_PduSender.java
index aec29bf162..5c95c3b366 100755
--- a/assignments/src/MV3500Cohort2019JulySeptember/homework2/Brennenstuhl/BRE_KNO_MCC/BRE_KNO_MCC_PC2_PC3_UNICAST_PduSender.java
+++ b/assignments/src/MV3500Cohort2019JulySeptember/homework2/Brennenstuhl/BRE_KNO_MCC/BRE_KNO_MCC_PC2_PC3_UNICAST_PduSender.java
@@ -4,6 +4,7 @@ import com.sun.corba.se.impl.orbutil.concurrent.Mutex;
 import java.util.*;
 
 import edu.nps.moves.dis7.*;
+import edu.nps.moves.dis7.enumerations.DISPDUType;
 import java.io.ByteArrayOutputStream;
 import java.io.DataOutputStream;
 import java.io.IOException;
@@ -20,15 +21,14 @@ public class BRE_KNO_MCC_PC2_PC3_UNICAST_PduSender
     static List<Pdu> messagesToSend = new ArrayList();
     static boolean keepRunning = false;
     static boolean isRunning = false;
-    
+
     static InetAddress pc3IP;
     static int portPC3;
 
-
     public static void run(InetAddress address, int port)
     {
         isRunning = true;
-        
+
         pc3IP = address;
         portPC3 = port;
 
@@ -43,32 +43,39 @@ public class BRE_KNO_MCC_PC2_PC3_UNICAST_PduSender
                     messagesToSend.remove(0);
                     mutex.release();
 
-                    //Sending via UNICAST
-                    ByteArrayOutputStream baos = new ByteArrayOutputStream();
-                    DataOutputStream dos = new DataOutputStream(baos);
-                    byte[] buffer;
-                    
-                    try
-                    {
-                        tempPdu.marshal(dos);
-                    }
-                    catch (Exception ex)
+                    if (tempPdu.getPduType() != DISPDUType.COMMENT)
                     {
-                        Logger.getLogger(BRE_KNO_MCC_PC2_PC3_UNICAST_PduSender.class.getName()).log(Level.SEVERE, null, ex);
+                        System.out.println("Received Message Is Not A CommentPDU. Skiped.");
                     }
-                    buffer = baos.toByteArray();
-                    DatagramPacket packet = new DatagramPacket(buffer, buffer.length, pc3IP, portPC3);
-                    
-                    try
+                    else
                     {
-                        DatagramSocket socket = new DatagramSocket(portPC3, pc3IP);
-                        socket.send(packet);
+                        //Sending via UNICAST
+                        ByteArrayOutputStream baos = new ByteArrayOutputStream();
+                        DataOutputStream dos = new DataOutputStream(baos);
+                        byte[] buffer;
+
+                        try
+                        {
+                            tempPdu.marshal(dos);
+                        }
+                        catch (Exception ex)
+                        {
+                            Logger.getLogger(BRE_KNO_MCC_PC2_PC3_UNICAST_PduSender.class.getName()).log(Level.SEVERE, null, ex);
+                        }
+                        buffer = baos.toByteArray();
+                        DatagramPacket packet = new DatagramPacket(buffer, buffer.length, pc3IP, portPC3);
+
+                        try
+                        {
+                            DatagramSocket socket = new DatagramSocket(portPC3);
+                            socket.send(packet);
+                        }
+                        catch (IOException ex)
+                        {
+                            Logger.getLogger(BRE_KNO_MCC_PC2_PC3_UNICAST_PduSender.class.getName()).log(Level.SEVERE, null, ex);
+                        }
                     }
-                    catch (IOException ex)
-                    {
-                        Logger.getLogger(BRE_KNO_MCC_PC2_PC3_UNICAST_PduSender.class.getName()).log(Level.SEVERE, null, ex);
-                    }                  
-                    
+
                 }
                 else
                 {
diff --git a/assignments/src/MV3500Cohort2019JulySeptember/homework2/Brennenstuhl/BRE_KNO_MCC/BRE_KNO_MCC_PC3_PC2_UNICAST_PduReceiver.java b/assignments/src/MV3500Cohort2019JulySeptember/homework2/Brennenstuhl/BRE_KNO_MCC/BRE_KNO_MCC_PC3_PC2_UNICAST_PduReceiver.java
index a01d9a9738..f7f6de6976 100644
--- a/assignments/src/MV3500Cohort2019JulySeptember/homework2/Brennenstuhl/BRE_KNO_MCC/BRE_KNO_MCC_PC3_PC2_UNICAST_PduReceiver.java
+++ b/assignments/src/MV3500Cohort2019JulySeptember/homework2/Brennenstuhl/BRE_KNO_MCC/BRE_KNO_MCC_PC3_PC2_UNICAST_PduReceiver.java
@@ -13,12 +13,9 @@ import java.util.logging.Logger;
 
 public class BRE_KNO_MCC_PC3_PC2_UNICAST_PduReceiver
 {
-    static Mutex mutex = new Mutex();
-    static List<Pdu> messagesToSend = new ArrayList();
     static boolean keepRunning = false;
     static boolean isRunning = false;
     
-    static InetAddress pc3IP;
     static int portPC3;
 
 
@@ -26,17 +23,7 @@ public class BRE_KNO_MCC_PC3_PC2_UNICAST_PduReceiver
     {
         isRunning = true;
         byte[] buffer = new byte[65507];
-                
-        try      
-        {
-            pc3IP = InetAddress.getByName("127.0.0.1");
-            portPC3 = 2343;
-        }
-        catch (UnknownHostException ex)
-        {
-            Logger.getLogger(BRE_KNO_MCC_PC3_PC2_UNICAST_PduReceiver.class.getName()).log(Level.SEVERE, null, ex);
-        }
-        
+        portPC3 = 2343;      
         
         try
         {
@@ -49,34 +36,35 @@ public class BRE_KNO_MCC_PC3_PC2_UNICAST_PduReceiver
                 {
                     clientSocket.receive(datagramPacket);  
                     PduFactory factory = new PduFactory();
+                    
                     Pdu tempPdu = factory.createPdu(datagramPacket.getData());
                     StringBuilder message = new StringBuilder();
                     message.append("Pdu type: ");
                     message.append(tempPdu.getPduType());
-                    message.append(" TimeStamp: ");
+                    message.append(" Intern ID: ");
                     message.append(tempPdu.getTimestamp());
                     
-                    System.out.println(message);
-                }
+                    //extract comments
+                    CommentPdu commentPdu = (CommentPdu)tempPdu; // cast to precise type
+                    ArrayList<VariableDatum> payloadList = (ArrayList)commentPdu.getVariableDatums();
+                    
+                    for (VariableDatum variableDatum : payloadList)
+                    {
+                        String nextComment = new String(variableDatum.getVariableDatumValue()); // convert byte[] to String
+                        message.append(nextComment);
+                    }                    
+                    
+                    System.out.println(message);                    
+                }                
                 catch (IOException ex)
                 {
                     Logger.getLogger(BRE_KNO_MCC_PC3_PC2_UNICAST_PduReceiver.class.getName()).log(Level.SEVERE, null, ex);
                 }
-                
-                
             }
-        
-        
         }
         catch (SocketException ex)
         {
             Logger.getLogger(BRE_KNO_MCC_PC3_PC2_UNICAST_PduReceiver.class.getName()).log(Level.SEVERE, null, ex);
-        }
-            
-
-                
-                
-                
-                
+        }   
     }
 }
-- 
GitLab