Adding class file deletion in Makefile for controllers
[iot2.git] / benchmarks / Java / IrrigationController / SprinklerSmart_Stub.java
index 6e06e56246b09fe6981881aae1980baae6895151..620929069e70b83f8f67949f29c9dc0ffaf79760 100644 (file)
@@ -4,24 +4,45 @@ import java.io.IOException;
 import java.util.List;
 import java.util.ArrayList;
 import java.util.Arrays;
-import iotrmi.Java.IoTRMICall;
-import iotrmi.Java.IoTRMIObject;
+import java.util.Map;
+import java.util.HashMap;
+import java.util.concurrent.atomic.AtomicBoolean;
+import iotrmi.Java.IoTRMIComm;
+import iotrmi.Java.IoTRMICommClient;
+import iotrmi.Java.IoTRMICommServer;
+import iotrmi.Java.IoTRMIUtil;
 
 import iotcode.interfaces.*;
 
 public class SprinklerSmart_Stub implements SprinklerSmart {
 
-       private IoTRMICall rmiCall;
-       private String callbackAddress;
-       private int[] ports;
-
-       private final static int objectId = 0;
+       private int objectId = 6;
+       private IoTRMIComm rmiComm;
+       // Synchronization variables
+       private AtomicBoolean retValueReceived4 = new AtomicBoolean(false);
+       private AtomicBoolean retValueReceived2 = new AtomicBoolean(false);
+       private AtomicBoolean retValueReceived3 = new AtomicBoolean(false);
        
 
-       public SprinklerSmart_Stub(int _port, String _skeletonAddress, String _callbackAddress, int _rev, int[] _ports) throws Exception {
-               callbackAddress = _callbackAddress;
-               ports = _ports;
-               rmiCall = new IoTRMICall(_port, _skeletonAddress, _rev);
+       public SprinklerSmart_Stub(int _localPortSend, int _localPortRecv, int _portSend, int _portRecv, String _skeletonAddress, int _rev) throws Exception {
+               if (_localPortSend != 0 && _localPortRecv != 0) {
+                       rmiComm = new IoTRMICommClient(_localPortSend, _localPortRecv, _portSend, _portRecv, _skeletonAddress, _rev);
+               } else
+               {
+                       rmiComm = new IoTRMICommClient(_portSend, _portRecv, _skeletonAddress, _rev);
+               }
+               rmiComm.registerStub(objectId, 4, retValueReceived4);
+               rmiComm.registerStub(objectId, 2, retValueReceived2);
+               rmiComm.registerStub(objectId, 3, retValueReceived3);
+               IoTRMIUtil.mapStub.put(objectId, this);
+       }
+
+       public SprinklerSmart_Stub(IoTRMIComm _rmiComm, int _objectId) throws Exception {
+               rmiComm = _rmiComm;
+               objectId = _objectId;
+               rmiComm.registerStub(objectId, 4, retValueReceived4);
+               rmiComm.registerStub(objectId, 2, retValueReceived2);
+               rmiComm.registerStub(objectId, 3, retValueReceived3);
        }
 
        public boolean doesHaveZoneTimers() {
@@ -29,7 +50,13 @@ public class SprinklerSmart_Stub implements SprinklerSmart {
                Class<?> retType = boolean.class;
                Class<?>[] paramCls = new Class<?>[] {  };
                Object[] paramObj = new Object[] {  };
-               Object retObj = rmiCall.remoteCall(objectId, methodId, retType, null, paramCls, paramObj);
+               rmiComm.remoteCall(objectId, methodId, paramCls, paramObj);
+               // Waiting for return value
+               while (!retValueReceived4.get());
+               Object retObj = rmiComm.getReturnValue(retType, null);
+               retValueReceived4.set(false);
+               rmiComm.setGetReturnBytes();
+
                return (boolean)retObj;
        }
 
@@ -38,8 +65,14 @@ public class SprinklerSmart_Stub implements SprinklerSmart {
                Class<?> retType = int.class;
                Class<?>[] paramCls = new Class<?>[] {  };
                Object[] paramObj = new Object[] {  };
-               Object retLenObj = rmiCall.remoteCall(objectId, methodId, retType, null, paramCls, paramObj);
-               int retLen = (int) retLenObj;
+               rmiComm.remoteCall(objectId, methodId, paramCls, paramObj);
+               // Waiting for return value
+               while (!retValueReceived2.get());
+               Object retObj = rmiComm.getReturnValue(retType, null);
+               retValueReceived2.set(false);
+               rmiComm.setGetReturnBytes();
+
+               int retLen = (int) retObj;
                Class<?>[] retCls = new Class<?>[3*retLen];
                Class<?>[] retClsVal = new Class<?>[3*retLen];
                int retPos = 0;
@@ -51,14 +84,19 @@ public class SprinklerSmart_Stub implements SprinklerSmart {
                        retCls[retPos] = int.class;
                        retClsVal[retPos++] = null;
                }
-               Object[] retObj = rmiCall.getStructObjects(retCls, retClsVal);
+               // Waiting for return value
+               while (!retValueReceived2.get());
+               Object[] retActualObj = rmiComm.getStructObjects(retCls, retClsVal);
+               retValueReceived2.set(false);
+               rmiComm.setGetReturnBytes();
+
                List<ZoneState> structRet = new ArrayList<ZoneState>();
                int retObjPos = 0;
                for(int i = 0; i < retLen; i++) {
                        ZoneState structRetMem = new ZoneState();
-                       structRetMem.zoneNumber = (int) retObj[retObjPos++];
-                       structRetMem.onOffState = (boolean) retObj[retObjPos++];
-                       structRetMem.duration = (int) retObj[retObjPos++];
+                       structRetMem.zoneNumber = (int) retActualObj[retObjPos++];
+                       structRetMem.onOffState = (boolean) retActualObj[retObjPos++];
+                       structRetMem.duration = (int) retActualObj[retObjPos++];
                        structRet.add(structRetMem);
                }
                return structRet;
@@ -69,7 +107,7 @@ public class SprinklerSmart_Stub implements SprinklerSmart {
                Class<?> retType = void.class;
                Class<?>[] paramCls = new Class<?>[] {  };
                Object[] paramObj = new Object[] {  };
-               rmiCall.remoteCall(objectId, methodId, retType, null, paramCls, paramObj);
+               rmiComm.remoteCall(objectId, methodId, paramCls, paramObj);
        }
 
        public void setZone(int _zone, boolean _onOff, int _onDurationSeconds) {
@@ -77,7 +115,7 @@ public class SprinklerSmart_Stub implements SprinklerSmart {
                Class<?> retType = void.class;
                Class<?>[] paramCls = new Class<?>[] { int.class, boolean.class, int.class };
                Object[] paramObj = new Object[] { _zone, _onOff, _onDurationSeconds };
-               rmiCall.remoteCall(objectId, methodId, retType, null, paramCls, paramObj);
+               rmiComm.remoteCall(objectId, methodId, paramCls, paramObj);
        }
 
        public int getNumberOfZones() {
@@ -85,7 +123,13 @@ public class SprinklerSmart_Stub implements SprinklerSmart {
                Class<?> retType = int.class;
                Class<?>[] paramCls = new Class<?>[] {  };
                Object[] paramObj = new Object[] {  };
-               Object retObj = rmiCall.remoteCall(objectId, methodId, retType, null, paramCls, paramObj);
+               rmiComm.remoteCall(objectId, methodId, paramCls, paramObj);
+               // Waiting for return value
+               while (!retValueReceived3.get());
+               Object retObj = rmiComm.getReturnValue(retType, null);
+               retValueReceived3.set(false);
+               rmiComm.setGetReturnBytes();
+
                return (int)retObj;
        }