1 package iotrmi.Java.sample;
3 import java.io.IOException;
4 import iotrmi.Java.IoTRMICall;
5 import iotruntime.master.CommunicationHandler;
7 import java.util.Arrays;
9 import java.util.ArrayList;
11 import iotrmi.Java.IoTRMIObject;
13 public class TestClass_CBStub implements TestClassInterface {
18 private IoTRMICall rmiCall;
19 private String address;
21 private List<CallBackInterface> listCBObj;
22 private IoTRMIObject rmiObj;
27 private final static int NUM_CB_OBJ = 1;
28 private int objectId = 0; // Default value is 0
29 private static int objIdCnt = 0; // Counter for callback object Ids
30 private final static String[] methodSignatures = {
37 "intsetACAndGetA(string,int)",
39 "voidregisterCallBack(CallBackInterface)",
40 "voidregisterCallBack(CallBackInterface[])",
47 // Assign rmiCall from outside
48 public TestClass_CBStub(IoTRMICall _rmiCall, int _objectId, String _address, int[] _ports) throws IOException {
54 listCBObj = new ArrayList<CallBackInterface>();
60 * Instantiation of callback objects
62 public static int numCallbackObjects() {
64 return NUM_CB_OBJ; // Generated by the IoTCompiler
68 // Return method signatures
69 public static String[] getMethodSignatures() {
71 return methodSignatures;
75 // Initialize callback
76 public void init_CallBack() {
78 Thread thread = new Thread() {
81 String[] methodSignatures = CallBack_CBSkeleton.getMethodSignatures();
82 rmiObj = new IoTRMIObject(ports[0], methodSignatures);
85 byte[] method = rmiObj.getMethodBytes();
86 int objId = IoTRMIObject.getObjectId(method);
87 CallBack_CBSkeleton skel = (CallBack_CBSkeleton) listCBObj.get(objId);
89 rmiObj.setMethodBytes(method);
90 retObj = skel.invokeMethod(rmiObj);
93 rmiObj.sendReturnObj(retObj);
96 } catch (Exception ex){
98 throw new Error("Error instantiating class CallBack_Skeleton!");
104 String sign = "registercallback";
105 Class<?> retType = void.class;
106 // port, address, rev, and number of objects
107 Class<?>[] paramCls = new Class<?>[] { int.class, String.class, int.class };
108 Object[] paramObj = new Object[] { ports[0], address, 0 };
109 rmiCall.remoteCall(objectId, sign, retType, null, null, paramCls, paramObj);
113 // Single callback handling
114 public void registerCallback(CallBackInterface _cb) {
116 Thread thread = new Thread() {
119 CallBack_Skeleton cbskel = new CallBack_Skeleton(_cb, ports[0]);
120 cbskel.waitRequestInvokeMethod();
121 } catch (Exception ex){
122 ex.printStackTrace();
123 throw new Error("Error instantiating class CallBack_Skeleton!");
129 String sign = "voidregisterCallBack(CallBackInterface)";
130 Class<?> retType = void.class;
131 // port, address, and rev
132 Class<?>[] paramCls = new Class<?>[] { int.class, String.class, int.class };
133 Object[] paramObj = new Object[] { ports[0], address, 0 };
134 rmiCall.remoteCall(objectId, sign, retType, null, null, paramCls, paramObj);
138 public void registerCallback(CallBackInterface[] _cb) {
141 //for (int objId = 0; objId < _cb.length; objId++) {
142 for (CallBackInterface cb : _cb) {
143 CallBack_CBSkeleton skel = new CallBack_CBSkeleton(cb, objIdCnt++);
146 } catch (Exception ex){
147 ex.printStackTrace();
148 throw new Error("Class not found / instantiation / illegal access / IO error!");
151 String sign = "voidregisterCallBack(CallBackInterface[])";
152 Class<?> retType = void.class;
153 // port, address, rev, and number of objects
154 Class<?>[] paramCls = new Class<?>[] { int.class };
155 Object[] paramObj = new Object[] { _cb.length };
156 rmiCall.remoteCall(objectId, sign, retType, null, null, paramCls, paramObj);
160 public void setA(int _int) {
162 String sign = "voidsetA(int)";
163 Class<?> retType = void.class;
164 Class<?>[] paramCls = new Class<?>[] { int.class };
165 Object[] paramObj = new Object[] { _int };
166 rmiCall.remoteCall(objectId, sign, retType, null, null, paramCls, paramObj);
170 public void setB(float _float) {
172 String sign = "voidsetB(float)";
173 Class<?> retType = void.class;
174 Class<?>[] paramCls = new Class<?>[] { float.class };
175 Object[] paramObj = new Object[] { _float };
176 rmiCall.remoteCall(objectId, sign, retType, null, null, paramCls, paramObj);
180 public void setC(String _string) {
182 String sign = "voidsetC(string)";
183 Class<?> retType = void.class;
184 Class<?>[] paramCls = new Class<?>[] { String.class };
185 Object[] paramObj = new Object[] { _string };
186 rmiCall.remoteCall(objectId, sign, retType, null, null, paramCls, paramObj);
191 public String sumArray(String[] newA) {
193 String sign = "sumArray(string[])";
194 Class<?> retType = String.class;
195 Class<?>[] paramCls = new Class<?>[] { String[].class };
196 Object[] paramObj = new Object[] { newA };
197 Object retObj = rmiCall.remoteCall(objectId, sign, retType, null, null, paramCls, paramObj);
198 return (String)retObj;
202 public int setAndGetA(int newA) {
203 String sign = "intsetAndGetA(int)";
204 Class<?> retType = int.class;
205 Class<?>[] paramCls = new Class<?>[] { int.class };
206 Object[] paramObj = new Object[] { newA };
207 Object retObj = rmiCall.remoteCall(objectId, sign, retType, null, null, paramCls, paramObj);
212 public int setACAndGetA(String newC, int newA) {
214 String sign = "intsetACAndGetA(string,int)";
215 Class<?> retType = int.class;
216 Class<?>[] paramCls = new Class<?>[] { String.class, int.class };
217 Object[] paramObj = new Object[] { newC, newA };
218 Object retObj = rmiCall.remoteCall(objectId, sign, retType, null, null, paramCls, paramObj);
223 public int callBack() {
225 String sign = "intcallBack()";
226 Class<?> retType = int.class;
227 Class<?>[] paramCls = new Class<?>[] { };
228 Object[] paramObj = new Object[] { };
229 Object retObj = rmiCall.remoteCall(objectId, sign, retType, null, null, paramCls, paramObj);
235 public static void main(String[] args) throws Exception {
237 CommunicationHandler comHan = new CommunicationHandler(true);
238 int numOfPorts = TestClass_Stub.numCallbackObjects();
239 int[] ports = comHan.getCallbackPorts(numOfPorts);
242 String address = "localhost";
245 System.out.println("Allocated ports: " + Arrays.toString(ports));
247 TestClass_Stub tcstub = new TestClass_Stub(port, address, rev, ports);
248 System.out.println("Return value: " + tcstub.setAndGetA(123));
249 System.out.println("Return value: " + tcstub.setACAndGetA("string", 123));
250 System.out.println("Return value: " + tcstub.sumArray(new String[] { "123", "456", "987" }));
252 CallBackInterface cb1 = new CallBack(23);
253 CallBackInterface cb2 = new CallBack(33);
254 CallBackInterface cb3 = new CallBack(43);
255 CallBackInterface[] cb = { cb1, cb2, cb3 };
256 tcstub.registerCallback(cb);
257 System.out.println("Return value from callback: " + tcstub.callBack());
258 CallBackInterface cb4 = new CallBack(10);
259 CallBackInterface cb5 = new CallBack(11);
260 CallBackInterface cb6 = new CallBack(12);
261 CallBackInterface[] cbt = { cb4, cb5, cb6 };
262 tcstub.registerCallback(cbt);
263 System.out.println("Return value from callback: " + tcstub.callBack());