/** * in case called from an actor, wraps the given interface instance into a proxy such that * all calls on the interface get scheduled on the calling actors thread (avoids accidental multithreading * when handing out callback/listener interfaces from an actor) * * if called from outside an actor thread, NOP * * @param anInterface * @param <T> * @return */ public static <T> T InThread( T anInterface ) { Actor sender = Actor.sender.get(); if ( sender != null ) return sender.getScheduler().inThread(sender.getActor(),anInterface); else return anInterface; }
/** * in case called from an actor, wraps the given interface instance into a proxy such that * all calls on the interface get scheduled on the calling actors thread (avoids accidental multithreading * when handing out callback/listener interfaces from an actor) * * if called from outside an actor thread, NOP * * @param anInterface * @param <T> * @return */ public static <T> T InThread( T anInterface ) { Actor sender = Actor.sender.get(); if ( sender != null ) return sender.getScheduler().inThread(sender.getActor(),anInterface); else return anInterface; }
/** * generic method for untyped remoting. * * @param messageId * @return */ @CallerSideMethod public IPromise ask(String messageId, Object ... args ) { boolean isCB = args != null && args.length > 0 && args[args.length-1] instanceof Callback; if ( isRemote() && __clientConnection instanceof ConnectionRegistry) { Actor sendingActor = Actor.sender.get(); Object[] newArgs = new Object[args.length+1]; System.arraycopy(args,0,newArgs,1,args.length); newArgs[0] = messageId; return (IPromise) getScheduler().enqueueCall((ConnectionRegistry) __clientConnection,sendingActor,getActor(),"ask",newArgs,isCB); } return (IPromise) getScheduler().enqueueCall(Actor.sender.get(),getActor(),messageId,args,isCB); }
/** * generic method for untyped remoting. * * @param messageId * @return */ @CallerSideMethod public void tell(String messageId, Object ... args ) { boolean isCB = args != null && args.length > 0 && args[args.length-1] instanceof Callback; if ( isRemote() && __clientConnection instanceof ConnectionRegistry) { Actor sendingActor = Actor.sender.get(); Object[] newArgs = new Object[args.length+1]; System.arraycopy(args,0,newArgs,1,args.length); newArgs[0] = messageId; getScheduler().enqueueCall((ConnectionRegistry) __clientConnection, sendingActor,getActor(),"tell",newArgs,isCB); return; } getScheduler().enqueueCall(Actor.sender.get(),getActor(),messageId,args,isCB); }
/** * generic method for untyped remoting. * * @param messageId * @return */ @CallerSideMethod public IPromise ask(String messageId, Object ... args ) { boolean isCB = args != null && args.length > 0 && args[args.length-1] instanceof Callback; if ( isRemote() && __clientConnection instanceof ConnectionRegistry) { Actor sendingActor = Actor.sender.get(); Object[] newArgs = new Object[args.length+1]; System.arraycopy(args,0,newArgs,1,args.length); newArgs[0] = messageId; return (IPromise) getScheduler().enqueueCall((ConnectionRegistry) __clientConnection,sendingActor,getActor(),"ask",newArgs,isCB); } return (IPromise) getScheduler().enqueueCall(Actor.sender.get(),getActor(),messageId,args,isCB); }
/** * generic method for untyped remoting. * * @param messageId * @return */ @CallerSideMethod public void tell(String messageId, Object ... args ) { boolean isCB = args != null && args.length > 0 && args[args.length-1] instanceof Callback; if ( isRemote() && __clientConnection instanceof ConnectionRegistry) { Actor sendingActor = Actor.sender.get(); Object[] newArgs = new Object[args.length+1]; System.arraycopy(args,0,newArgs,1,args.length); newArgs[0] = messageId; getScheduler().enqueueCall((ConnectionRegistry) __clientConnection, sendingActor,getActor(),"tell",newArgs,isCB); return; } getScheduler().enqueueCall(Actor.sender.get(),getActor(),messageId,args,isCB); }
rce.unpackArgs(registry.getConf()); try { Object future = getScheduler().enqueueCallFromRemote(registry, null, self(), rce.getMethod(), rce.getArgs(), false, null, callInterceptor); if ( future instanceof IPromise) { Promise p = null;
rce.unpackArgs(registry.getConf()); try { Object future = getScheduler().enqueueCallFromRemote(registry, null, self(), rce.getMethod(), rce.getArgs(), false, null, callInterceptor); if ( future instanceof IPromise) { Promise p = null;