X-Git-Url: http://plrg.eecs.uci.edu/git/?p=iot2.git;a=blobdiff_plain;f=benchmarks%2FJava%2FSpeakerController%2FSpeakerSmart_Stub.java;h=3bc830126c387d07f71823878cd2c69184cbd02c;hp=71147e695d44408e2a510e0a9b9d69622ef99255;hb=f5572a3e890f23430f0f0aed320012c8c0a5c294;hpb=4463245c0a9fa5d6e045a69ecdeed9a2575a4fbb diff --git a/benchmarks/Java/SpeakerController/SpeakerSmart_Stub.java b/benchmarks/Java/SpeakerController/SpeakerSmart_Stub.java index 71147e6..3bc8301 100644 --- a/benchmarks/Java/SpeakerController/SpeakerSmart_Stub.java +++ b/benchmarks/Java/SpeakerController/SpeakerSmart_Stub.java @@ -4,35 +4,54 @@ 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 SpeakerSmart_Stub implements SpeakerSmart { - private IoTRMICall rmiCall; - private String callbackAddress; - private int[] ports; - - private final static int objectId = 0; - // Callback properties - private IoTRMIObject rmiObj; - List listCallbackObj; - private int objIdCnt = 0; - private final static int object0Id = 0; //SpeakerSmartCallback - private static Integer[] object0Permission = { 0 }; - private static List set0Allowed; + private int objectId = 1; + private IoTRMIComm rmiComm; + // Synchronization variables + private AtomicBoolean retValueReceived6 = new AtomicBoolean(false); + private AtomicBoolean retValueReceived2 = new AtomicBoolean(false); + private AtomicBoolean retValueReceived1 = new AtomicBoolean(false); + private AtomicBoolean retValueReceived3 = new AtomicBoolean(false); + private AtomicBoolean retValueReceived4 = new AtomicBoolean(false); + private AtomicBoolean retValueReceived5 = new AtomicBoolean(false); - public SpeakerSmart_Stub(int _port, String _skeletonAddress, String _callbackAddress, int _rev, int[] _ports) throws Exception { - callbackAddress = _callbackAddress; - ports = _ports; - rmiCall = new IoTRMICall(_port, _skeletonAddress, _rev); - set0Allowed = new ArrayList(Arrays.asList(object0Permission)); - listCallbackObj = new ArrayList(); - set0Allowed.add(-9999); - ___initCallBack(); + public SpeakerSmart_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, 6, retValueReceived6); + rmiComm.registerStub(objectId, 2, retValueReceived2); + rmiComm.registerStub(objectId, 1, retValueReceived1); + rmiComm.registerStub(objectId, 3, retValueReceived3); + rmiComm.registerStub(objectId, 4, retValueReceived4); + rmiComm.registerStub(objectId, 5, retValueReceived5); + IoTRMIUtil.mapStub.put(objectId, this); + } + + public SpeakerSmart_Stub(IoTRMIComm _rmiComm, int _objectId) throws Exception { + rmiComm = _rmiComm; + objectId = _objectId; + rmiComm.registerStub(objectId, 6, retValueReceived6); + rmiComm.registerStub(objectId, 2, retValueReceived2); + rmiComm.registerStub(objectId, 1, retValueReceived1); + rmiComm.registerStub(objectId, 3, retValueReceived3); + rmiComm.registerStub(objectId, 4, retValueReceived4); + rmiComm.registerStub(objectId, 5, retValueReceived5); } public int getPosition() { @@ -40,7 +59,13 @@ public class SpeakerSmart_Stub implements SpeakerSmart { 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 (!retValueReceived6.get()); + Object retObj = rmiComm.getReturnValue(retType, null); + retValueReceived6.set(false); + rmiComm.setGetReturnBytes(); + return (int)retObj; } @@ -49,7 +74,13 @@ public class SpeakerSmart_Stub implements SpeakerSmart { 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 (!retValueReceived2.get()); + Object retObj = rmiComm.getReturnValue(retType, null); + retValueReceived2.set(false); + rmiComm.setGetReturnBytes(); + return (boolean)retObj; } @@ -58,7 +89,7 @@ public class SpeakerSmart_Stub implements SpeakerSmart { 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 boolean startPlayback() { @@ -66,7 +97,13 @@ public class SpeakerSmart_Stub implements SpeakerSmart { 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 (!retValueReceived1.get()); + Object retObj = rmiComm.getReturnValue(retType, null); + retValueReceived1.set(false); + rmiComm.setGetReturnBytes(); + return (boolean)retObj; } @@ -75,7 +112,13 @@ public class SpeakerSmart_Stub implements SpeakerSmart { 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 (!retValueReceived3.get()); + Object retObj = rmiComm.getReturnValue(retType, null); + retValueReceived3.set(false); + rmiComm.setGetReturnBytes(); + return (boolean)retObj; } @@ -84,7 +127,13 @@ public class SpeakerSmart_Stub implements SpeakerSmart { Class retType = boolean.class; Class[] paramCls = new Class[] { float.class }; Object[] paramObj = new Object[] { _percent }; - 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; } @@ -93,7 +142,13 @@ public class SpeakerSmart_Stub implements SpeakerSmart { Class retType = float.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 (!retValueReceived5.get()); + Object retObj = rmiComm.getReturnValue(retType, null); + retValueReceived5.set(false); + rmiComm.setGetReturnBytes(); + return (float)retObj; } @@ -102,7 +157,7 @@ public class SpeakerSmart_Stub implements SpeakerSmart { Class retType = void.class; Class[] paramCls = new Class[] { int.class }; Object[] paramObj = new Object[] { _mSec }; - rmiCall.remoteCall(objectId, methodId, retType, null, paramCls, paramObj); + rmiComm.remoteCall(objectId, methodId, paramCls, paramObj); } public void loadData(short _samples[], int _offs, int _len) { @@ -110,7 +165,7 @@ public class SpeakerSmart_Stub implements SpeakerSmart { Class retType = void.class; Class[] paramCls = new Class[] { short[].class, int.class, int.class }; Object[] paramObj = new Object[] { _samples, _offs, _len }; - rmiCall.remoteCall(objectId, methodId, retType, null, paramCls, paramObj); + rmiComm.remoteCall(objectId, methodId, paramCls, paramObj); } public void init() { @@ -118,13 +173,37 @@ public class SpeakerSmart_Stub implements SpeakerSmart { 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 registerCallback(SpeakerCallback _cb) { + int[] objIdSent0 = new int[1]; try { - SpeakerCallback_CallbackSkeleton skel0 = new SpeakerCallback_CallbackSkeleton(_cb, callbackAddress, objIdCnt++); - listCallbackObj.add(skel0); + if (!IoTRMIUtil.mapSkel.containsKey(_cb)) { + int newObjIdSent = rmiComm.getObjectIdCounter(); + objIdSent0[0] = newObjIdSent; + rmiComm.decrementObjectIdCounter(); + SpeakerCallback_Skeleton skel0 = new SpeakerCallback_Skeleton(_cb, rmiComm, newObjIdSent); + IoTRMIUtil.mapSkel.put(_cb, skel0); + IoTRMIUtil.mapSkelId.put(_cb, newObjIdSent); + Thread thread = new Thread() { + public void run() { + try { + skel0.___waitRequestInvokeMethod(); + } catch (Exception ex) { + ex.printStackTrace(); + throw new Error("Exception when trying to run ___waitRequestInvokeMethod() for SpeakerCallback_Skeleton!"); + } + } + }; + thread.start(); + while(!skel0.didAlreadyInitWaitInvoke()); + } + else + { + int newObjIdSent = IoTRMIUtil.mapSkelId.get(_cb); + objIdSent0[0] = newObjIdSent; + } } catch (Exception ex) { ex.printStackTrace(); throw new Error("Exception when generating skeleton objects!"); @@ -132,43 +211,9 @@ public class SpeakerSmart_Stub implements SpeakerSmart { int methodId = 10; Class retType = void.class; - Class[] paramCls = new Class[] { int.class }; - Object[] paramObj = new Object[] { new Integer(1) }; - rmiCall.remoteCall(objectId, methodId, retType, null, paramCls, paramObj); - } - - public void ___initCallBack() { - Thread thread = new Thread() { - public void run() { - try { - rmiObj = new IoTRMIObject(ports[0]); - while (true) { - byte[] method = rmiObj.getMethodBytes(); - int objId = IoTRMIObject.getObjectId(method); - SpeakerCallback_CallbackSkeleton skel = (SpeakerCallback_CallbackSkeleton) listCallbackObj.get(objId); - if (skel != null) { - int methodId = IoTRMIObject.getMethodId(method); - if (!set0Allowed.contains(methodId)) { - throw new Error("Callback object for SpeakerCallback is not allowed to access method: " + methodId); - } - skel.invokeMethod(rmiObj); - } else { - throw new Error("SpeakerCallback: Object with Id " + objId + " not found!"); - } - } - } catch (Exception ex) { - ex.printStackTrace(); - throw new Error("Error instantiating class SpeakerCallback_CallbackSkeleton!"); - } - } - }; - thread.start(); - - int methodId = -9998; - Class retType = void.class; - Class[] paramCls = new Class[] { int[].class, String.class, int.class }; - Object[] paramObj = new Object[] { ports, callbackAddress, 0 }; - rmiCall.remoteCall(objectId, methodId, retType, null, paramCls, paramObj); + Class[] paramCls = new Class[] { int[].class }; + Object[] paramObj = new Object[] { objIdSent0 }; + rmiComm.remoteCall(objectId, methodId, paramCls, paramObj); } }