/** Class CommunicationHandler is a class that maintains
* a data structure that preserves a collection of host name,
* port numbers, and objects that are running
- * +-----------------+----+--------+------------------+--------------+----------------+
- * | HOST-ADDRESS | ...|IN-PORT | RMIREGISTRY-PORT | RMISTUB-PORT | ACTIVE OBJECTS |
- * +-----------------+----+--------+------------------+--------------+----------------+
- * | XXX.XXX.XXX.XXX | | XXXXX | XXXXX | XXXXX | XXXXXXXXXXXXXX |
- * | | | XXXXX | XXXXX | XXXXX | XXXXXXXXXXXXXX |
- * | | | XXXXX | XXXXX | XXXXX | XXXXXXXXXXXXXX |
- * | | ...| ... | ... | ... | ... |
- * +-----------------+----+--------+------------------+--------------+----------------+
+ * +-----------------+----+--------+------------------+--------------+----+----------------+
+ * | HOST-ADDRESS | ...|IN-PORT | RMIREGISTRY-PORT | RMISTUB-PORT | ...| ACTIVE OBJECTS |
+ * +-----------------+----+--------+------------------+--------------+----+----------------+
+ * | XXX.XXX.XXX.XXX | | XXXXX | XXXXX | XXXXX | | XXXXXXXXXXXXXX |
+ * | | | XXXXX | XXXXX | XXXXX | | XXXXXXXXXXXXXX |
+ * | | | XXXXX | XXXXX | XXXXX | | XXXXXXXXXXXXXX |
+ * | | ...| ... | ... | ... | ...| ... |
+ * +-----------------+----+--------+------------------+--------------+----+----------------+
* In this case we use ACTIVE OBJECTS names as the key
* So ACTIVE OBJECTS maps to numbers and these numbers map to each other
* entry in hashmaps (HostAddress can be repetitive)
* ProximitySensorPS1 - 1
* TempSensorTS1 - 2
* ...
- * IN-PORT / RMIREGISTRY-PORT / RMISTUB-PORT / HOST-ADDRESS: 0 - XXXXX
- * 1 - XXXXX
- * 2 - XXXXX
- * +-------------+
- * | DEVICE-PORT |
- * +-------------+
- * | XXXXX |
- * | XXXXX |
- * | XXXXX |
- * | ... |
- * +-------------+
- * We add a Set structure to handle all the other ports that are used by devices
- * when communicating with their respective drivers
*
* @author Rahmadi Trimananda <rahmadi.trimananda @ uci.edu>
* @version 1.0
private Map<Integer, Integer> hmRMIRegPort;
private Map<Integer, Integer> hmRMIStubPort;
private Set<Integer> hsDevicePort;
- private Set<Integer> hsCallbackPort;
- private Map<Integer, Integer[]> hmCallbackPort;
private Map<Integer, Integer> hmAdditionalPort;
private int iNumOfObjects;
private int iNumOfHosts;
private final int INT_MIN_PORT = 10000;
/**
- * Empty constructor
+ * Constructor
*/
public CommunicationHandler(boolean _bVerbose) {
hmRMIRegPort = new HashMap<Integer, Integer>();
hmRMIStubPort = new HashMap<Integer, Integer>();
hsDevicePort = new HashSet<Integer>();
- hsCallbackPort = new HashSet<Integer>();
- hmCallbackPort = new HashMap<Integer, 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()
int iComPort = 0;
do {
iComPort = random.nextInt(INT_MAX_PORT - INT_MIN_PORT + 1) + INT_MIN_PORT;
- // Check port existence in HashMap
+ // Check port existence in HashMap
} while (portIsAvailable(iComPort) == false);
hmComPort.put(iNumOfObjects, iComPort);
int iRMIRegPort = 0;
do {
iRMIRegPort = random.nextInt(INT_MAX_PORT - INT_MIN_PORT + 1) + INT_MIN_PORT;
- // Check port existence in HashMap
+ // Check port existence in HashMap
} while (portIsAvailable(iRMIRegPort) == false);
hmRMIRegPort.put(iNumOfObjects, iRMIRegPort);
int iRMIStubPort = 0;
do {
iRMIStubPort = random.nextInt(INT_MAX_PORT - INT_MIN_PORT + 1) + INT_MIN_PORT;
- // Check port existence in HashMap
+ // Check port existence in HashMap
} while (portIsAvailable(iRMIStubPort) == false);
hmRMIStubPort.put(iNumOfObjects, iRMIStubPort);
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 getCallbackPorts()
- * <p>
- * Get a set of new ports 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 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;
- }
-
-
/**
* Method addDevicePort()
* <p>
public void addDevicePort(int iDevPort) {
hsDevicePort.add(iDevPort);
-
}
/**
int iAdditionalPort = 0;
do {
iAdditionalPort = random.nextInt(INT_MAX_PORT - INT_MIN_PORT + 1) + INT_MIN_PORT;
- // Check port existence in HashMap
+ // Check port existence in HashMap
} while (portIsAvailable(iAdditionalPort) == false);
hmAdditionalPort.put(iNumOfObjects, iAdditionalPort);
return false;
} else if (hsDevicePort.contains(iPortNumber) == true) {
return false;
- } else if (hsCallbackPort.contains(iPortNumber) == true) {
- return false;
} else {
return true;
}
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);