X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=iotjava%2Fiotrmi%2FJava%2Fsample%2FTestClass_Skeleton.java;h=822e0644c318090528f08697baf85a3b6f9a2198;hb=8e565033fd19c4696f67862ade27f0ebbacf5682;hp=7147073ee1c56902922bf72739706b5283a1f4e1;hpb=697c980109cdee55fdf8b69b8bba7b6e3100a440;p=iot2.git diff --git a/iotjava/iotrmi/Java/sample/TestClass_Skeleton.java b/iotjava/iotrmi/Java/sample/TestClass_Skeleton.java index 7147073..822e064 100644 --- a/iotjava/iotrmi/Java/sample/TestClass_Skeleton.java +++ b/iotjava/iotrmi/Java/sample/TestClass_Skeleton.java @@ -2,9 +2,8 @@ package iotrmi.Java.sample; import java.io.IOException; import java.util.Arrays; -import java.util.Set; -import java.util.Map; -import java.util.HashMap; + +import java.util.List; import iotrmi.Java.IoTRMIObject; import iotrmi.Java.IoTRMICall; @@ -14,30 +13,20 @@ public class TestClass_Skeleton implements TestClassInterface { /** * Class Constants */ - private int objectId = 0; // Default value is 0 - private static int objIdCnt = 0; // Counter for callback object Ids - private final static String[] methodSignatures = { - - "voidsetA(int)", // 0 - "voidsetB(float)", // 1 - "voidsetC(string)", // 2 - "sumArray(string[])", // 3 - "intsetAndGetA(int)", // 4 - "intsetACAndGetA(string,int)", // 5 - "intcallBack()", // 6 - "voidregisterCallBack(CallBackInterface)", // 7 - "voidregisterCallBack(CallBackInterface[])", // 8 - "registercallback", // 9 - "handleStruct(StructJ[])", // 10 - "structsize" // 11 - }; - private TestClassInterface tc; private int port; private IoTRMIObject rmiObj; + + // Callback stuff + private static int objIdCnt = 0; // Counter for callback object Ids private IoTRMICall rmiCall; private CallBackInterface cbstub; + // Object permission + private int object0Id = 0; + private static Integer[] object0Permission = { 0, 1, 2, 3, 4, 5 }; + private List set0Allowed; + /** * Constructors @@ -49,6 +38,7 @@ public class TestClass_Skeleton implements TestClassInterface { tc = _tc; port = _port; rmiObj = new IoTRMIObject(_port); + set0Allowed = Arrays.asList(object0Permission); ___waitRequestInvokeMethod(); } @@ -62,7 +52,7 @@ public class TestClass_Skeleton implements TestClassInterface { public void ___setA() { Object[] paramObj = rmiObj.getMethodParams(new Class[] { int.class }, - new Class[] { null }, new Class[] { null }); + new Class[] { null }); setA((int) paramObj[0]); } @@ -76,7 +66,7 @@ public class TestClass_Skeleton implements TestClassInterface { public void ___setB() { Object[] paramObj = rmiObj.getMethodParams(new Class[] { float.class }, - new Class[] { null }, new Class[] { null }); + new Class[] { null }); setB((float) paramObj[0]); } @@ -90,7 +80,7 @@ public class TestClass_Skeleton implements TestClassInterface { public void ___setC() { Object[] paramObj = rmiObj.getMethodParams(new Class[] { String.class }, - new Class[] { null }, new Class[] { null }); + new Class[] { null }); setC((String) paramObj[0]); } @@ -104,7 +94,7 @@ public class TestClass_Skeleton implements TestClassInterface { public void ___sumArray() throws IOException { Object[] paramObj = rmiObj.getMethodParams(new Class[] { String[].class }, - new Class[] { null }, new Class[] { null }); + new Class[] { null }); Object retObj = sumArray((String[]) paramObj[0]); rmiObj.sendReturnObj(retObj); } @@ -119,7 +109,7 @@ public class TestClass_Skeleton implements TestClassInterface { public void ___setAndGetA() throws IOException { Object[] paramObj = rmiObj.getMethodParams(new Class[] { int.class }, - new Class[] { null }, new Class[] { null }); + new Class[] { null }); Object retObj = setAndGetA((int) paramObj[0]); rmiObj.sendReturnObj(retObj); } @@ -134,7 +124,7 @@ public class TestClass_Skeleton implements TestClassInterface { public void ___setACAndGetA() throws IOException { Object[] paramObj = rmiObj.getMethodParams(new Class[] { String.class, int.class }, - new Class[] { null, null }, new Class[] { null, null }); + new Class[] { null, null }); Object retObj = setACAndGetA((String) paramObj[0], (int) paramObj[1]); rmiObj.sendReturnObj(retObj); } @@ -149,7 +139,7 @@ public class TestClass_Skeleton implements TestClassInterface { 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 }); + new Class[] { null, null, null }); CallBackInterface cbstub = new CallBack_Stub((int) paramObj[0], (String) paramObj[1], (int) paramObj[2]); registerCallback((CallBackInterface) cbstub); } @@ -165,7 +155,7 @@ public class TestClass_Skeleton implements TestClassInterface { public void ____registerCallback() throws IOException { Object[] paramObj = rmiObj.getMethodParams(new Class[] { int.class }, - new Class[] { null }, new Class[] { null }); + new Class[] { null }); int numStubs = (int) paramObj[0]; CallBackInterface[] stub = new CallBackInterface[numStubs]; for (int objId = 0; objId < numStubs; objId++) { @@ -179,7 +169,7 @@ public class TestClass_Skeleton implements TestClassInterface { 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 }); + 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"); @@ -199,39 +189,35 @@ public class TestClass_Skeleton implements TestClassInterface { } - public void handleStruct(StructJ[] data) { + public StructJ[] handleStruct(StructJ[] data) { - tc.handleStruct(data); + return tc.handleStruct(data); } public int ___structSize() { Object[] paramObj = rmiObj.getMethodParams(new Class[] { int.class }, - new Class[] { null }, new Class[] { null }); + new Class[] { null }); return (int) paramObj[0]; } - public void ___handleStruct(int structsize1) { + public void ___handleStruct(int structsize1) throws IOException { Class[] paramCls = new Class[3*structsize1]; - Class[] paramClsTyp1 = new Class[3*structsize1]; - Class[] paramClsTyp2 = new Class[3*structsize1]; + Class[] paramClsVal = new Class[3*structsize1]; int pos = 0; for(int i=0; i < structsize1; i++) { paramCls[pos] = String.class; - paramClsTyp1[pos] = null; - paramClsTyp2[pos++] = null; + paramClsVal[pos++] = null; paramCls[pos] = float.class; - paramClsTyp1[pos] = null; - paramClsTyp2[pos++] = null; + paramClsVal[pos++] = null; paramCls[pos] = int.class; - paramClsTyp1[pos] = null; - paramClsTyp2[pos++] = null; + paramClsVal[pos++] = null; } Object[] paramObj = rmiObj.getMethodParams(paramCls, - paramClsTyp1, paramClsTyp2); + paramClsVal); StructJ[] data = new StructJ[structsize1]; for (int i=0; i < structsize1; i++) { data[i] = new StructJ(); @@ -242,50 +228,108 @@ public class TestClass_Skeleton implements TestClassInterface { 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 EnumJ[] handleEnum(EnumJ[] en) { + + return tc.handleEnum(en); + } + + + public void ___handleEnum() throws IOException { + + 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[paramInt[i]]; + } + // if void, just "handleEnum(data)" + // this is when we have return value EnumJ[] + EnumJ[] retEnum = handleEnum(data); + // Get length first + int enumSize2 = retEnum.length; + // Now send the array of integers + int[] retEnumInt = new int[enumSize2]; + for (int i=0; i < enumSize2; i++) { + retEnumInt[i] = retEnum[i].ordinal(); + } + Object retObj = retEnumInt; + rmiObj.sendReturnObj(retObj); } private void ___waitRequestInvokeMethod() throws IOException { // Struct size - int structsize1 = 0; + int structSize1 = 0; + int enumSize1 = 0; // Loop continuously waiting for incoming bytes while (true) { rmiObj.getMethodBytes(); int _objectId = rmiObj.getObjectId(); - if (_objectId == objectId) { + int methodId = rmiObj.getMethodId(); + if (_objectId == object0Id) { // 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("Signature not recognized!"); - } - } - } - } + // Complain if the method is not allowed + if (!set0Allowed.contains(methodId)) + throw new Error("TestClass_Skeleton: This object is not allowed to access method " + methodId); + // If we have more than 1 object Id... + //else if (_objectId == object1Id) { + } else + throw new Error("TestClass_Skeleton: Unrecognizable object Id: " + _objectId); - // Return method signatures - public static String[] getMethodSignatures() { + 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; + case 12: ___handleEnum(); break; + default: + throw new Error("Method Id " + methodId + " not recognized!"); + } - return methodSignatures; + } } @@ -295,51 +339,5 @@ public class TestClass_Skeleton implements TestClassInterface { 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 mapCBObject = new HashMap(); - - // 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(); - }*/ } }