* Class Constants
*/
private int objectId = 0; // Default value is 0
- private final static String[] methodSignatures = {
-
- "voidsetA(int)",
- "voidsetB(float)",
- "voidsetC(string)",
- "sumArray(string[])",
- "intsetAndGetA(int)",
- "intsetACAndGetA(string,int)",
- "intcallBack()",
- "voidregisterCallBack(CallBackInterface)",
- "voidregisterCallBack(CallBackInterface[])"
- };
-
+ private static int objIdCnt = 0; // Counter for callback object Ids
private TestClassInterface tc;
private int port;
private IoTRMIObject rmiObj;
+ private IoTRMICall rmiCall;
private CallBackInterface cbstub;
tc = _tc;
port = _port;
- rmiObj = new IoTRMIObject(_port, methodSignatures);
- waitRequestInvokeMethod();
+ rmiObj = new IoTRMIObject(_port);
+ ___waitRequestInvokeMethod();
}
-
- public void waitRequestInvokeMethod() throws IOException {
-
- // Loop continuously waiting for incoming bytes
- while (true) {
-
- rmiObj.getMethodBytes();
- int _objectId = rmiObj.getObjectId();
- if (_objectId == objectId) {
- // Multiplex based on object Id
- String methodSign = rmiObj.getSignature();
- Object[] paramObj = null;
- Object retObj = null;
-
- if (methodSign.equals("voidsetA(int)")) {
- paramObj = rmiObj.getMethodParams(new Class<?>[] { int.class },
- new Class<?>[] { null }, new Class<?>[] { null });
- setA((int) paramObj[0]);
- } else if (methodSign.equals("voidsetB(float)")) {
- paramObj = rmiObj.getMethodParams(new Class<?>[] { float.class },
- new Class<?>[] { null }, new Class<?>[] { null });
- setB((float) paramObj[0]);
- } else if (methodSign.equals("voidsetC(string)")) {
- paramObj = rmiObj.getMethodParams(new Class<?>[] { String.class },
- new Class<?>[] { null }, new Class<?>[] { null });
- setC((String) paramObj[0]);
- } else if (methodSign.equals("sumArray(string[])")) {
- paramObj = rmiObj.getMethodParams(new Class<?>[] { String[].class },
- new Class<?>[] { null }, new Class<?>[] { null });
- retObj = sumArray((String[]) paramObj[0]);
- } else if (methodSign.equals("intsetAndGetA(int)")) {
- paramObj = rmiObj.getMethodParams(new Class<?>[] { int.class },
- new Class<?>[] { null }, new Class<?>[] { null });
- retObj = setAndGetA((int) paramObj[0]);
- } else if (methodSign.equals("intsetACAndGetA(string,int)")) {
- paramObj = rmiObj.getMethodParams(new Class<?>[] { String.class, int.class },
- new Class<?>[] { null, null }, new Class<?>[] { null, null });
- retObj = setACAndGetA((String) paramObj[0], (int) paramObj[1]);
- } else if (methodSign.equals("voidregisterCallBack(CallBackInterface)")) {
- paramObj = rmiObj.getMethodParams(new Class<?>[] { int.class, String.class, int.class },
- new Class<?>[] { null, null, null }, new Class<?>[] { null, null, null });
- CallBackInterface cbstub = new CallBack_Stub((int) paramObj[0], (String) paramObj[1], (int) paramObj[2]);
- registerCallback((CallBackInterface) cbstub);
- } else if (methodSign.equals("voidregisterCallBack(CallBackInterface[])")) {
- paramObj = rmiObj.getMethodParams(new Class<?>[] { int.class, String.class, int.class, int.class },
- new Class<?>[] { null, null, null, null }, new Class<?>[] { null, null, null, null });
- String[] methodSignatures = CallBack_CBStub.getMethodSignatures();
- IoTRMICall rmiCall = new IoTRMICall((int) paramObj[0], (String) paramObj[1], (int) paramObj[2], methodSignatures);
- int numStubs = (int) paramObj[3];
- CallBackInterface[] stub = new CallBackInterface[numStubs];
- for (int objId = 0; objId < numStubs; objId++) {
- stub[objId] = new CallBack_CBStub(rmiCall, objId, (String) paramObj[1]);
- }
- registerCallback(stub);
- } else if (methodSign.equals("intcallBack()")) {
- retObj = callBack();
- } else
- throw new Error("Signature not recognized!");
-
- if (retObj != null) {
- rmiObj.sendReturnObj(retObj);
- }
- System.out.println("Servicing remote call for object: " + objectId + " - method: " + methodSign);
- }
- }
- }
-
-
- // Return method signatures
- public static String[] getMethodSignatures() {
-
- return methodSignatures;
- }
-
public void setA(int _int) {
}
+ public void ___setA() {
+
+ Object[] paramObj = rmiObj.getMethodParams(new Class<?>[] { int.class },
+ new Class<?>[] { null }, new Class<?>[] { null });
+ setA((int) paramObj[0]);
+ }
+
+
public void setB(float _float) {
tc.setB(_float);
}
+ public void ___setB() {
+
+ Object[] paramObj = rmiObj.getMethodParams(new Class<?>[] { float.class },
+ new Class<?>[] { null }, new Class<?>[] { null });
+ setB((float) paramObj[0]);
+ }
+
+
public void setC(String _string) {
tc.setC(_string);
}
+ public void ___setC() {
+
+ Object[] paramObj = rmiObj.getMethodParams(new Class<?>[] { String.class },
+ new Class<?>[] { null }, new Class<?>[] { null });
+ setC((String) paramObj[0]);
+ }
+
+
public String sumArray(String[] newA) {
return tc.sumArray(newA);
}
+ public void ___sumArray() throws IOException {
+
+ Object[] paramObj = rmiObj.getMethodParams(new Class<?>[] { String[].class },
+ new Class<?>[] { null }, new Class<?>[] { null });
+ Object retObj = sumArray((String[]) paramObj[0]);
+ rmiObj.sendReturnObj(retObj);
+ }
+
+
public int setAndGetA(int newA) {
return tc.setAndGetA(newA);
}
+ public void ___setAndGetA() throws IOException {
+
+ Object[] paramObj = rmiObj.getMethodParams(new Class<?>[] { int.class },
+ new Class<?>[] { null }, new Class<?>[] { null });
+ Object retObj = setAndGetA((int) paramObj[0]);
+ rmiObj.sendReturnObj(retObj);
+ }
+
+
public int setACAndGetA(String newC, int newA) {
return tc.setACAndGetA(newC, newA);
}
+ public void ___setACAndGetA() throws IOException {
+
+ Object[] paramObj = rmiObj.getMethodParams(new Class<?>[] { String.class, int.class },
+ new Class<?>[] { null, null }, new Class<?>[] { null, null });
+ Object retObj = setACAndGetA((String) paramObj[0], (int) paramObj[1]);
+ rmiObj.sendReturnObj(retObj);
+ }
+
+
public void registerCallback(CallBackInterface _cb) {
tc.registerCallback(_cb);
}
+
+
+ public void ___registerCallback() throws IOException {
+
+ Object[] paramObj = rmiObj.getMethodParams(new Class<?>[] { int.class, String.class, int.class },
+ new Class<?>[] { null, null, null }, new Class<?>[] { null, null, null });
+ CallBackInterface cbstub = new CallBack_Stub((int) paramObj[0], (String) paramObj[1], (int) paramObj[2]);
+ registerCallback((CallBackInterface) cbstub);
+ }
+
public void registerCallback(CallBackInterface[] _cb) {
tc.registerCallback(_cb);
}
+
+ // Use 4 underscores because this is a second instance of registerCallback
+ public void ____registerCallback() throws IOException {
+
+ Object[] paramObj = rmiObj.getMethodParams(new Class<?>[] { int.class },
+ new Class<?>[] { null }, new Class<?>[] { null });
+ int numStubs = (int) paramObj[0];
+ CallBackInterface[] stub = new CallBackInterface[numStubs];
+ for (int objId = 0; objId < numStubs; objId++) {
+ stub[objId] = new CallBack_CBStub(rmiCall, objIdCnt);
+ objIdCnt++;
+ }
+ registerCallback(stub);
+ }
+
+
+ public void ___regCB() throws IOException {
+
+ Object[] paramObj = rmiObj.getMethodParams(new Class<?>[] { int.class, String.class, int.class },
+ new Class<?>[] { null, null, null }, new Class<?>[] { null, null, null });
+ //String[] methodSignatures = CallBack_CBStub.getMethodSignatures();
+ rmiCall = new IoTRMICall((int) paramObj[0], (String) paramObj[1], (int) paramObj[2]);
+ System.out.println("Creating a new IoTRMICall object");
+ }
+
+
public int callBack() {
return tc.callBack();
}
+
+
+ public void ___callBack() throws IOException {
+
+ Object retObj = callBack();
+ rmiObj.sendReturnObj(retObj);
+ }
+
+
+ public void handleStruct(StructJ[] data) {
+
+ tc.handleStruct(data);
+ }
+
+
+ public int ___structSize() {
+
+ Object[] paramObj = rmiObj.getMethodParams(new Class<?>[] { int.class },
+ new Class<?>[] { null }, new Class<?>[] { null });
+ return (int) paramObj[0];
+ }
+
+
+ public void ___handleStruct(int structsize1) {
+
+ Class<?>[] paramCls = new Class<?>[3*structsize1];
+ Class<?>[] paramClsTyp1 = new Class<?>[3*structsize1];
+ Class<?>[] paramClsTyp2 = new Class<?>[3*structsize1];
+ int pos = 0;
+ for(int i=0; i < structsize1; i++) {
+ paramCls[pos] = String.class;
+ paramClsTyp1[pos] = null;
+ paramClsTyp2[pos++] = null;
+ paramCls[pos] = float.class;
+ paramClsTyp1[pos] = null;
+ paramClsTyp2[pos++] = null;
+ paramCls[pos] = int.class;
+ paramClsTyp1[pos] = null;
+ paramClsTyp2[pos++] = null;
+ }
+ Object[] paramObj = rmiObj.getMethodParams(paramCls,
+ paramClsTyp1, paramClsTyp2);
+ StructJ[] data = new StructJ[structsize1];
+ for (int i=0; i < structsize1; i++) {
+ data[i] = new StructJ();
+ }
+ pos = 0;
+ for(int i=0; i < structsize1; i++) {
+ data[i].name = (String) paramObj[pos++];
+ data[i].value = (float) paramObj[pos++];
+ data[i].year = (int) paramObj[pos++];
+ }
+ tc.handleStruct(data);
+ }
+
+ private void ___waitRequestInvokeMethod() throws IOException {
+
+ // Struct size
+ int structsize1 = 0;
+ // Loop continuously waiting for incoming bytes
+ while (true) {
+ rmiObj.getMethodBytes();
+ int _objectId = rmiObj.getObjectId();
+ if (_objectId == objectId) {
+ // Multiplex based on object Id
+ int methodId = rmiObj.getMethodId();
+ switch (methodId) {
+
+ case 0: ___setA(); break;
+ case 1: ___setB(); break;
+ case 2: ___setC(); break;
+ case 3: ___sumArray(); break;
+ case 4: ___setAndGetA(); break;
+ case 5: ___setACAndGetA(); break;
+ case 6: ___callBack(); break;
+ case 7: ___registerCallback(); break;
+ case 8: ____registerCallback(); break;
+ // Special option to register callback
+ case 9: ___regCB(); break;
+ // Struct handling (3 is the size of the struct)
+ case 10: ___handleStruct(structsize1); break;
+ case 11: structsize1 = ___structSize(); break;
+ default:
+ throw new Error("Method Id not recognized!");
+ }
+ }
+ }
+ }
+
+
public static void main(String[] args) throws Exception {
int port = 5010;