}
- public void handleStruct(StructJ[] data) {
+ public StructJ[] handleStruct(StructJ[] data) {
- tc.handleStruct(data);
+ return tc.handleStruct(data);
}
}
- public void ___handleStruct(int structsize1) {
+ public void ___handleStruct(int structsize1) throws IOException {
Class<?>[] paramCls = new Class<?>[3*structsize1];
Class<?>[] paramClsVal = new Class<?>[3*structsize1];
data[i].value = (float) paramObj[pos++];
data[i].year = (int) paramObj[pos++];
}
- tc.handleStruct(data);
+ // Just the following if there is no returned value
+ //tc.handleStruct(data);
+ StructJ[] retStruct = tc.handleStruct(data);
+ // Return length first
+ int structsize2 = retStruct.length;
+ Object retObj = structsize2;
+ rmiObj.sendReturnObj(retObj);
+ // Send the actual struct members
+ // Calculate the size of the array
+ Class<?>[] retCls = new Class<?>[3*structsize2];
+ Object[] retObj2 = new Object[3*structsize2];
+ // Handle with for loop
+ pos = 0;
+ for(int i = 0; i < structsize2; i++) {
+ retCls[pos] = String.class;
+ retObj2[pos++] = data[i].name;
+ retCls[pos] = float.class;
+ retObj2[pos++] = data[i].value;
+ retCls[pos] = int.class;
+ retObj2[pos++] = data[i].year;
+ }
+ rmiObj.sendReturnObj(retCls, retObj2);
}
}
- public int ___enumSize() {
-
- Object[] paramObj = rmiObj.getMethodParams(new Class<?>[] { int.class },
- new Class<?>[] { null });
- return (int) paramObj[0];
- }
-
-
- public void ___handleEnum(int enumSize1) throws IOException {
+ public void ___handleEnum() throws IOException {
- Class<?>[] paramCls = new Class<?>[enumSize1];
- Class<?>[] paramClsVal = new Class<?>[enumSize1];
- for(int i=0; i < enumSize1; i++) {
- paramCls[i] = int.class;
- paramClsVal[i] = null;
- }
- Object[] paramObj = rmiObj.getMethodParams(paramCls,
- paramClsVal);
+ Object[] paramObj = rmiObj.getMethodParams(new Class<?>[] { int[].class },
+ new Class<?>[] { null });
// Encoder/decoder
+ int paramInt[] = (int[]) paramObj[0];
+ int enumSize1 = paramInt.length;
EnumJ[] enumJ = EnumJ.values();
EnumJ[] data = new EnumJ[enumSize1];
for (int i=0; i < enumSize1; i++) {
- data[i] = enumJ[(int) paramObj[i]];
+ data[i] = enumJ[paramInt[i]];
}
// if void, just "handleEnum(data)"
// this is when we have return value EnumJ[]
// Struct handling (3 is the size of the struct)
case 10: ___handleStruct(structSize1); break;
case 11: structSize1 = ___structSize(); break;
- case 12: ___handleEnum(enumSize1); break;
- case 13: enumSize1 = ___enumSize(); break;
+ case 12: ___handleEnum(); break;
default:
throw new Error("Method Id not recognized!");
}
TestClass tc = new TestClass(3, 5f, "7911");
TestClass_Skeleton tcSkel = new TestClass_Skeleton(tc, port);
-/* String[] methodSignatures = TestClass_CBSkeleton.getMethodSignatures();
- IoTRMIObject rmiObj = new IoTRMIObject(port, methodSignatures);
- Map<Integer,TestClassInterface> mapCBObject = new HashMap<Integer,TestClassInterface>();
-
- // Can replace for-loop with while-loop if necessary
- for (int i = 1; i < 3; i++) {
- TestClassInterface tcSkel = new TestClass_CBSkeleton(tc, i);
- mapCBObject.put(i, tcSkel);
- }
-
- Object retObj = null;
- while (true) {
- byte[] method = rmiObj.getMethodBytes();
- int objId = IoTRMIObject.getObjectId(method);
- TestClass_CBSkeleton tcSkel = (TestClass_CBSkeleton) mapCBObject.get(objId);
- if (tcSkel != null) {
- rmiObj.setMethodBytes(method);
- retObj = tcSkel.invokeMethod(rmiObj);
- }
- if (retObj != null) {
- rmiObj.sendReturnObj(retObj);
- }
- }
-*/
- //int objectId = 1;
- //System.out.println("Creating 0 object");
- //TestClass_Skeleton tcSkel1 = new TestClass_Skeleton(tc, rmiObj, objectId);
- //System.out.println("Creating 1 object");
- //objectId = 2;
- //TestClass_Skeleton tcSkel2 = new TestClass_Skeleton(tc, rmiObj, objectId);
- //System.out.println("Creating 2 object");
-
- /*for (int i = 1; i < 3; i++) {
- final int objectId = i;
- Thread thread = new Thread() {
- public void run() {
- try{
- TestClass_Skeleton tcSkel = new TestClass_Skeleton(tc, rmiObj, objectId);
- } catch (Exception ex){
- ex.printStackTrace();
- throw new Error("Error instantiating class CallBack_Skeleton!");
- }
- }
- };
- thread.start();
- }*/
}
}