Adjustments to firewall rules generation/initializations for running multiple benchmarks
[iot2.git] / iotjava / iotruntime / master / CommunicationHandler.java
index 6f9c67a230f9cfe550c758aac665349cc42b7591..fd4340828242297ea6e8a5768a92347139488a1e 100644 (file)
@@ -67,8 +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 Map<Integer, Integer[]> hmCallbackPort;
+       private Set<Integer> hsAllPorts;
+       private Map<Integer, Integer> hmAdditionalPort;
        private int iNumOfObjects;
        private int iNumOfHosts;
        private boolean bVerbose;
@@ -97,13 +97,40 @@ public final class CommunicationHandler {
                hmRMIRegPort = new HashMap<Integer, Integer>();
                hmRMIStubPort = new HashMap<Integer, Integer>();
                hsDevicePort = new HashSet<Integer>();
-               hsCallbackPort = new HashSet<Integer>();
-               hmCallbackPort = new HashMap<Integer, 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()
@@ -141,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 {
@@ -148,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 {
@@ -155,6 +185,7 @@ public final class CommunicationHandler {
                        // Check port existence in HashMap
                } while (portIsAvailable(iRMIStubPort) == false);
                hmRMIStubPort.put(iNumOfObjects, iRMIStubPort);
+               hsAllPorts.add(iRMIStubPort);
 
                iNumOfObjects++;
        }
@@ -184,74 +215,46 @@ public final class CommunicationHandler {
                listObjCrtInfo.add(objCrtInfo);
        }
 
-
        /**
-        * Method getCallbackPort()
+        * Method addDevicePort()
         * <p>
-        * Get a new port for new connections for callback objects in the program.
-        * This newly generated port number will be recorded.
+        * Add a port that is used by a device when communicating with its driver
+        * This port will be taken into account when checking for port availability
         *
-        * @return  int[]       A set of callback ports
+        * @param   iDevPort  Device port number
+        * @return  void
         */
-       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]);
-               }
+       public void addDevicePort(int iDevPort) {
 
-               return ports;
+               hsDevicePort.add(iDevPort);
+               // Track this port number
+        hsAllPorts.add(iDevPort);
        }
 
-
        /**
-        * Method getCallbackPorts()
+        * Method addAdditionalPort()
         * <p>
-        * Get a set of new ports for new connections for callback objects in the program.
+        * Add a new port for new connections for any objects in the program.
         * This newly generated port number will be recorded.
         *
-        * @return  int[]       A set of callback ports
+        * @return  int         One new port
         */
-       public Integer[] getCallbackPorts(String sAObject, int numOfPorts) {
-
-               Integer[] ports = new Integer[numOfPorts];
-               int iNumOfObject = hmActiveObj.get(sAObject);
-
-               if (!hmCallbackPort.containsKey(iNumOfObject)) {
-                       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]);
-                       }
-                       hmCallbackPort.put(iNumOfObject, ports);
-               } else {
-                       ports = hmCallbackPort.get(iNumOfObject);
-               }
-
-               return ports;
-       }
+       public int addAdditionalPort(String sAObject) {
 
+               hmActiveObj.put(sAObject, iNumOfObjects);
 
-       /**
-        * Method addDevicePort()
-        * <p>
-        * Add a port that is used by a device when communicating with its driver
-        * This port will be taken into account when checking for port availability
-        *
-        * @param   iDevPort  Device port number
-        * @return  void
-        */
-       public void addDevicePort(int iDevPort) {
+               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);
 
-               hsDevicePort.add(iDevPort);
+               iNumOfObjects++;
 
+               return iAdditionalPort;
        }
 
        /**
@@ -266,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;
                }
        }
 
@@ -367,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>
@@ -482,9 +503,6 @@ public final class CommunicationHandler {
                                RuntimeOutput.print("\n", bVerbose);
                        }
                }
-               for(Integer i : hsCallbackPort)
-                       RuntimeOutput.print("RMI callback Port: " + i, bVerbose);
-               RuntimeOutput.print("\n", bVerbose);
 
                for(int iPort : hsDevicePort) {
                        RuntimeOutput.print("Device Port: " + iPort, bVerbose);