015af4a3ae44fc3fa58bc67c6fea922cf86c2df3
[iot2.git] / benchmarks / drivers / Java / LabRoom / Room_Skeleton.java
1 package iotcode.LabRoom;
2
3 import java.io.IOException;
4 import java.util.List;
5 import java.util.ArrayList;
6 import java.util.Arrays;
7 import java.util.Map;
8 import java.util.HashMap;
9 import java.util.concurrent.atomic.AtomicBoolean;
10 import iotrmi.Java.IoTRMIComm;
11 import iotrmi.Java.IoTRMICommClient;
12 import iotrmi.Java.IoTRMICommServer;
13 import iotrmi.Java.IoTRMIUtil;
14
15 import iotcode.interfaces.Room;
16
17 public class Room_Skeleton implements Room {
18
19         private Room mainObj;
20         private int objectId = 2;
21         // Communications and synchronizations
22         private IoTRMIComm rmiComm;
23         private AtomicBoolean didAlreadyInitWaitInvoke;
24         private AtomicBoolean methodReceived;
25         private byte[] methodBytes = null;
26         // Permissions
27         private final static int object0Id = 0; //RoomSmart
28         private static Integer[] object0Permission = { 0 };
29         private static List<Integer> set0Allowed;
30         
31
32         public Room_Skeleton(Room _mainObj, int _portSend, int _portRecv) throws Exception {
33                 mainObj = _mainObj;
34                 rmiComm = new IoTRMICommServer(_portSend, _portRecv);
35                 set0Allowed = new ArrayList<Integer>(Arrays.asList(object0Permission));
36                 IoTRMIUtil.mapSkel.put(_mainObj, this);
37                 IoTRMIUtil.mapSkelId.put(_mainObj, objectId);
38                 didAlreadyInitWaitInvoke = new AtomicBoolean(false);
39                 methodReceived = new AtomicBoolean(false);
40                 rmiComm.registerSkeleton(objectId, methodReceived);
41                 Thread thread1 = new Thread() {
42                         public void run() {
43                                 try {
44                                         ___waitRequestInvokeMethod();
45                                 }
46                                 catch (Exception ex)
47                                 {
48                                         ex.printStackTrace();
49                                 }
50                         }
51                 };
52                 thread1.start();
53         }
54
55         public Room_Skeleton(Room _mainObj, IoTRMIComm _rmiComm, int _objectId) throws Exception {
56                 mainObj = _mainObj;
57                 rmiComm = _rmiComm;
58                 objectId = _objectId;
59                 set0Allowed = new ArrayList<Integer>(Arrays.asList(object0Permission));
60                 didAlreadyInitWaitInvoke = new AtomicBoolean(false);
61                 methodReceived = new AtomicBoolean(false);
62                 rmiComm.registerSkeleton(objectId, methodReceived);
63         }
64
65         public boolean didAlreadyInitWaitInvoke() {
66                 return didAlreadyInitWaitInvoke.get();
67         }
68
69         public int getRoomID() {
70                 return mainObj.getRoomID();
71         }
72
73         public void ___getRoomID() throws IOException {
74                 byte[] localMethodBytes = methodBytes;
75                 rmiComm.setGetMethodBytes();
76                 Object[] paramObj = rmiComm.getMethodParams(new Class<?>[] {  }, new Class<?>[] {  }, localMethodBytes);
77                 Object retObj = getRoomID();
78                 rmiComm.sendReturnObj(retObj, localMethodBytes);
79         }
80
81         public void ___waitRequestInvokeMethod() throws IOException {
82                 didAlreadyInitWaitInvoke.compareAndSet(false, true);
83                 while (true) {
84                         if (!methodReceived.get()) {
85                                 continue;
86                         }
87                         methodBytes = rmiComm.getMethodBytes();
88                         methodReceived.set(false);
89                         int _objectId = IoTRMIComm.getObjectId(methodBytes);
90                         int methodId = IoTRMIComm.getMethodId(methodBytes);
91                         if (_objectId == objectId) {
92                                 if (!set0Allowed.contains(methodId)) {
93                                         throw new Error("Object with object Id: " + _objectId + "  is not allowed to access method: " + methodId);
94                                 }
95                         }
96                         else {
97                                 continue;
98                         }
99                         switch (methodId) {
100                                 case 0:
101                                 new Thread() {
102                                         public void run() {
103                                                 try {
104                                                         ___getRoomID();
105                                                 }
106                                                 catch (Exception ex) {
107                                                         ex.printStackTrace();
108                                                 }
109                                         }
110                                 }.start();
111                                 break;
112                                 default: 
113                                 throw new Error("Method Id " + methodId + " not recognized!");
114                         }
115                 }
116         }
117
118 }