5c50b044a5d77b13164b68b83772d90ead5e1b3b
[iot2.git] / benchmarks / SmartLightsController / CameraSmartCallback_Stub.java
1 package SmartLightsController;
2
3 import java.io.IOException;
4 import java.util.List;
5 import java.util.ArrayList;
6 import java.util.Arrays;
7 import iotrmi.Java.IoTRMICall;
8 import iotrmi.Java.IoTRMIObject;
9
10 import iotcode.interfaces.*;
11
12 public class CameraSmartCallback_Stub implements CameraSmartCallback {
13
14         private IoTRMICall rmiCall;
15         private String callbackAddress;
16         private int[] ports;
17
18         private final static int objectId = 0;
19         // Callback properties
20         private IoTRMIObject rmiObj;
21         List<Camera> listCallbackObj;
22         private static int objIdCnt = 0;
23         private final static int object0Id = 0; //CameraSmart
24         private static Integer[] object0Permission = { 8, 7, 9, 6, 2, 1, 4, 3, 0, 10, 5 };
25         private static List<Integer> set0Allowed;
26         
27
28         public CameraSmartCallback_Stub(int _port, String _skeletonAddress, String _callbackAddress, int _rev, int[] _ports) throws Exception {
29                 callbackAddress = _callbackAddress;
30                 ports = _ports;
31                 rmiCall = new IoTRMICall(_port, _skeletonAddress, _rev);
32                 set0Allowed = new ArrayList<Integer>(Arrays.asList(object0Permission));
33                 listCallbackObj = new ArrayList<Camera>();
34                 ___initCallBack();
35         }
36
37         public void newCameraFrameAvailable(Camera _camera) {
38                 try {
39                         Camera_CallbackSkeleton skel0 = new Camera_CallbackSkeleton(_camera, callbackAddress, objIdCnt++);
40                         listCallbackObj.add(skel0);
41                 } catch (Exception ex) {
42                         ex.printStackTrace();
43                         throw new Error("Exception when generating skeleton objects!");
44                 }
45
46                 int methodId = 0;
47                 Class<?> retType = void.class;
48                 Class<?>[] paramCls = new Class<?>[] { int.class };
49                 Object[] paramObj = new Object[] { new Integer(1) };
50                 rmiCall.remoteCall(objectId, methodId, retType, null, paramCls, paramObj);
51         }
52
53         public void ___initCallBack() {
54                 Thread thread = new Thread() {
55                         public void run() {
56                                 try {
57                                         rmiObj = new IoTRMIObject(ports[0]);
58                                         while (true) {
59                                                 byte[] method = rmiObj.getMethodBytes();
60                                                 int methodId = IoTRMIObject.getMethodId(method);
61                                                 if (!set0Allowed.contains(methodId)) {
62                                                         throw new Error("Callback object for Camera is not allowed to access method: " + methodId);
63                                                 }
64                                                 int objId = IoTRMIObject.getObjectId(method);
65                                                 Camera_CallbackSkeleton skel = (Camera_CallbackSkeleton) listCallbackObj.get(objId);
66                                                 if (skel != null) {
67                                                         skel.invokeMethod(rmiObj);
68                                                 } else {
69                                                         throw new Error("Camera: Object with Id " + objId + " not found!");
70                                                 }
71                                         }
72                                 } catch (Exception ex) {
73                                         ex.printStackTrace();
74                                         throw new Error("Error instantiating class Camera_CallbackSkeleton!");
75                                 }
76                         }
77                 };
78                 thread.start();
79
80                 int methodId = -9999;
81                 Class<?> retType = void.class;
82                 Class<?>[] paramCls = new Class<?>[] { int[].class, String.class, int.class };
83                 Object[] paramObj = new Object[] { ports, callbackAddress, 0 };
84                 rmiCall.remoteCall(objectId, methodId, retType, null, paramCls, paramObj);
85         }
86
87 }