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;
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()
// 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 {
// Check port existence in HashMap
} while (portIsAvailable(iRMIRegPort) == false);
hmRMIRegPort.put(iNumOfObjects, iRMIRegPort);
+ hsAllPorts.add(iRMIRegPort);
int iRMIStubPort = 0;
do {
// Check port existence in HashMap
} while (portIsAvailable(iRMIStubPort) == false);
hmRMIStubPort.put(iNumOfObjects, iRMIStubPort);
+ hsAllPorts.add(iRMIStubPort);
iNumOfObjects++;
}
* @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);
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>
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;
}
/**
*/
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;
}
}
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>
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);
}
}