package iotrmi.Java.sample;
import java.io.IOException;
+import java.util.Arrays;
import java.util.Set;
-import iotrmi.Java.IoTRMIObject;
+import java.util.Map;
+import java.util.HashMap;
-import java.util.Arrays;
+import iotrmi.Java.IoTRMIObject;
+import iotrmi.Java.IoTRMICall;
public class TestClass_Skeleton implements TestClassInterface {
- private String[] methodSignatures = {
+ /**
+ * Class Constants
+ */
+ private int objectId = 0; // Default value is 0
+ private final static String[] methodSignatures = {
"voidsetA(int)",
"voidsetB(float)",
"intsetAndGetA(int)",
"intsetACAndGetA(string,int)",
"intcallBack()",
- "voidregisterCallBack(CallBackInterface)"
+ "voidregisterCallBack(CallBackInterface)",
+ "voidregisterCallBack(CallBackInterface[])"
};
- private TestClass tc;
+ private TestClassInterface tc;
+ private int port;
private IoTRMIObject rmiObj;
private CallBackInterface cbstub;
/**
* Constructors
*/
- //public TestClass_Skeleton(Object[] paramObj, int _port) throws
public TestClass_Skeleton(TestClass _tc, int _port) throws
ClassNotFoundException, InstantiationException,
IllegalAccessException, IOException {
- //tc = new TestClass((int)paramObj[0], (float)paramObj[1], (String)paramObj[2]);
tc = _tc;
+ port = _port;
rmiObj = new IoTRMIObject(_port, methodSignatures);
+ waitRequestInvokeMethod();
}
while (true) {
rmiObj.getMethodBytes();
- String methodSign = rmiObj.getSignature();
- Object[] paramObj = null;
- Object retObj = null;
- System.out.println("Method sign: " + methodSign);
-
- 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("intcallBack()")) {
- retObj = callBack();
- } else
- throw new Error("Signature un-recognized!");
-
- if (retObj != null) {
- rmiObj.sendReturnObj(retObj);
+ 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);
}
- System.out.println("Servicing remote call for method: " + methodSign);
}
}
+
+
+ // Return method signatures
+ public static String[] getMethodSignatures() {
+
+ return methodSignatures;
+ }
public void setA(int _int) {
tc.registerCallback(_cb);
}
-
+
+ public void registerCallback(CallBackInterface[] _cb) {
+
+ tc.registerCallback(_cb);
+ }
public int callBack() {
int port = 5010;
TestClass tc = new TestClass(3, 5f, "7911");
- //TestClass_Skeleton tcSkel = new TestClass_Skeleton(new Object[] { 3, 5f, "7911"}, port);
TestClass_Skeleton tcSkel = new TestClass_Skeleton(tc, port);
- tcSkel.waitRequestInvokeMethod();
+
+/* 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();
+ }*/
}
}