Adjustments to firewall rules generation/initializations for running multiple benchmarks
[iot2.git] / iotjava / iotruntime / master / CommunicationHandler.java
index 1026b0cbb48a8a98e1c371adf62c8862d09a2c83..fd4340828242297ea6e8a5768a92347139488a1e 100644 (file)
@@ -67,7 +67,8 @@ public final class CommunicationHandler {
        private Map<Integer, Integer> hmRMIRegPort;
        private Map<Integer, Integer> hmRMIStubPort;
        private Set<Integer> hsDevicePort;
-       private Set<Integer> hsCallbackPort;
+       private Set<Integer> hsAllPorts;
+       private Map<Integer, Integer> hmAdditionalPort;
        private int iNumOfObjects;
        private int iNumOfHosts;
        private boolean bVerbose;
@@ -96,12 +97,40 @@ public final class CommunicationHandler {
                hmRMIRegPort = new HashMap<Integer, Integer>();
                hmRMIStubPort = new HashMap<Integer, Integer>();
                hsDevicePort = new HashSet<Integer>();
-               hsCallbackPort = new HashSet<Integer>();
+               hsAllPorts = new HashSet<Integer>();
+               hmAdditionalPort = new HashMap<Integer, Integer>();
                iNumOfObjects = 0;
                iNumOfHosts = 0;
                bVerbose = _bVerbose;
                RuntimeOutput.print("CommunicationHandler: Creating a new CommunicationHandler object!", bVerbose);
        }
+       
+       /**
+        * Method clearCommunicationHandler()
+        * <p>
+        * Clear the data structure
+        *
+        * @return  void
+        */
+       public void clearCommunicationHandler() {
+
+               listActiveControllerObj.clear();
+               listFieldObjectID.clear();
+               listObjCrtInfo.clear();
+               listArrFieldValues.clear();
+               listArrFieldClasses.clear();
+               hmActiveObj.clear();
+               hmHostAdd.clear();
+               hmHostList.clear();
+               hmComPort.clear();
+               hmRMIRegPort.clear();
+               hmRMIStubPort.clear();
+               hsDevicePort.clear();
+               hmAdditionalPort.clear();
+               iNumOfObjects = 0;
+               iNumOfHosts = 0;
+               RuntimeOutput.print("CommunicationHandler: Clearing CommunicationHandler object's data structure!", bVerbose);
+    }
 
        /**
         * Method addPortConnection()
@@ -139,6 +168,8 @@ public final class CommunicationHandler {
                        // Check port existence in HashMap
                } while (portIsAvailable(iComPort) == false);
                hmComPort.put(iNumOfObjects, iComPort);
+               // hsAllPorts tracks all the existing and used port numbers
+               hsAllPorts.add(iComPort);
 
                int iRMIRegPort = 0;
                do {
@@ -146,6 +177,7 @@ public final class CommunicationHandler {
                        // Check port existence in HashMap
                } while (portIsAvailable(iRMIRegPort) == false);
                hmRMIRegPort.put(iNumOfObjects, iRMIRegPort);
+               hsAllPorts.add(iRMIRegPort);
 
                int iRMIStubPort = 0;
                do {
@@ -153,6 +185,7 @@ public final class CommunicationHandler {
                        // Check port existence in HashMap
                } while (portIsAvailable(iRMIStubPort) == false);
                hmRMIStubPort.put(iNumOfObjects, iRMIStubPort);
+               hsAllPorts.add(iRMIStubPort);
 
                iNumOfObjects++;
        }
@@ -170,7 +203,7 @@ public final class CommunicationHandler {
         * @return  void
         */
        public void addActiveControllerObject(String strFieldObjectID, String strObjName, String strObjClassName,
-               String strObjClassInterfaceName, String strIoTSlaveObjectHostAdd, Object[] arrFieldValues, 
+               String strObjClassInterfaceName, String strObjStubClsIntfaceName, String strIoTSlaveObjectHostAdd, Object[] arrFieldValues, 
                Class[] arrFieldClasses) {
 
                listActiveControllerObj.add(strObjName);
@@ -178,35 +211,10 @@ public final class CommunicationHandler {
                listArrFieldValues.add(arrFieldValues);
                listArrFieldClasses.add(arrFieldClasses);
                ObjectCreationInfo objCrtInfo = new ObjectCreationInfo(strIoTSlaveObjectHostAdd, strObjName,
-                       strObjClassName, strObjClassInterfaceName);
+                       strObjClassName, strObjClassInterfaceName, strObjStubClsIntfaceName);
                listObjCrtInfo.add(objCrtInfo);
        }
 
-
-       /**
-        * Method getCallbackPort()
-        * <p>
-        * Get a new port for new connections for callback objects in the program.
-        * This newly generated port number will be recorded.
-        *
-        * @return  int[]       A set of callback ports
-        */
-       public int[] getCallbackPorts(int numOfPorts) {
-
-               int[] ports = new int[numOfPorts];
-
-               for(int i = 0; i < numOfPorts; i++) {
-                       do {
-                               ports[i] = random.nextInt(INT_MAX_PORT - INT_MIN_PORT + 1) + INT_MIN_PORT;
-                               // Check port existence in HashMap
-                       } while (portIsAvailable(ports[i]) == false);
-                       hsCallbackPort.add(ports[i]);
-               }
-
-               return ports;
-       }
-
-
        /**
         * Method addDevicePort()
         * <p>
@@ -219,7 +227,34 @@ public final class CommunicationHandler {
        public void addDevicePort(int iDevPort) {
 
                hsDevicePort.add(iDevPort);
+               // Track this port number
+        hsAllPorts.add(iDevPort);
+       }
+
+       /**
+        * Method addAdditionalPort()
+        * <p>
+        * Add a new port for new connections for any objects in the program.
+        * This newly generated port number will be recorded.
+        *
+        * @return  int         One new port
+        */
+       public int addAdditionalPort(String sAObject) {
+
+               hmActiveObj.put(sAObject, iNumOfObjects);
+
+               int iAdditionalPort = 0;
+               do {
+                       iAdditionalPort = random.nextInt(INT_MAX_PORT - INT_MIN_PORT + 1) + INT_MIN_PORT;
+                       // Check port existence in HashMap
+               } while (portIsAvailable(iAdditionalPort) == false);
+               hmAdditionalPort.put(iNumOfObjects, iAdditionalPort);
+               // Track this port number
+               hsAllPorts.add(iAdditionalPort);
+
+               iNumOfObjects++;
 
+               return iAdditionalPort;
        }
 
        /**
@@ -234,18 +269,23 @@ public final class CommunicationHandler {
         */
        public boolean portIsAvailable(int iPortNumber) {
 
-               if (hmComPort.containsValue(iPortNumber) == true) {
+               /*if (hmComPort.containsValue(iPortNumber) == true) {
                        return false;
                } else if (hmRMIRegPort.containsValue(iPortNumber) == true) {
                        return false;
                } else if (hmRMIStubPort.containsValue(iPortNumber) == true) {
                        return false;
-               } else if (hsDevicePort.contains(iPortNumber) == true) {
+               } else if (hmAdditionalPort.containsValue(iPortNumber) == true) {
                        return false;
-               } else if (hsCallbackPort.contains(iPortNumber) == true) {
+               } else if (hsDevicePort.contains(iPortNumber) == true) {
                        return false;
                } else {
                        return true;
+               }*/
+               if (hsAllPorts.contains(iPortNumber)) {
+                   return false;
+               } else {
+                   return true;
                }
        }
 
@@ -335,6 +375,19 @@ public final class CommunicationHandler {
                return hmComPort.get(hmActiveObj.get(sAObject));
        }
 
+       /**
+        * Method getAdditionalPort()
+        * <p>
+        * User finds a port number using Object name
+        *
+        * @param   sAObject  String active object name
+        * @return  Integer
+        */
+       public Integer getAdditionalPort(String sAObject) {
+
+               return hmAdditionalPort.get(hmActiveObj.get(sAObject));
+       }
+
        /**
         * Method getRMIRegPort()
         * <p>
@@ -447,13 +500,13 @@ public final class CommunicationHandler {
                                RuntimeOutput.print("Communication Port: " + hmComPort.get(iIndex), bVerbose);
                                RuntimeOutput.print("RMI Registry Port: " + hmRMIRegPort.get(iIndex), bVerbose);
                                RuntimeOutput.print("RMI Stub Port: " + hmRMIStubPort.get(iIndex), bVerbose);
+                               RuntimeOutput.print("\n", bVerbose);
                        }
                }
 
                for(int iPort : hsDevicePort) {
-
                        RuntimeOutput.print("Device Port: " + iPort, bVerbose);
-
                }
+               RuntimeOutput.print("\n", bVerbose);
        }
 }