InterfacedActorRef IActorBoundChannelSync.BindActor(InterfacedActorRef actor, ActorBindingFlags bindingFlags) { if (actor == null) { throw new ArgumentNullException(nameof(actor)); } var targetActor = actor.CastToIActorRef(); if (targetActor == null) { throw new ArgumentException("InterfacedActorRef should have valid IActorRef target."); } var actorId = BindActor(targetActor, new[] { new BoundType(actor.InterfaceType) }, bindingFlags); if (actorId == 0) { return(null); } var actorRef = (InterfacedActorRef)Activator.CreateInstance(actor.GetType()); InterfacedActorRefModifier.SetTarget(actorRef, new BoundActorTarget(actorId)); return(actorRef); }
public IActorRef GetBoundActorRef(InterfacedActorRef actor) { var boundRef = actor.Target as BoundActorTarget; return(boundRef != null ? GetBoundActorRef(boundRef.Id) : null); }
// Cast (not type-safe) public static TRef Cast <TRef>(this InterfacedActorRef actorRef) where TRef : InterfacedActorRef, new() { if (actorRef == null) { return(null); } return(new TRef() { Target = actorRef.Target, RequestWaiter = actorRef.RequestWaiter, Timeout = actorRef.Timeout }); }
InterfacedActorRef IActorBoundChannelSync.BindActor(InterfacedActorRef actor, ActorBindingFlags bindingFlags) { if (actor == null) throw new ArgumentNullException(nameof(actor)); var targetActor = actor.CastToIActorRef(); if (targetActor == null) throw new ArgumentException("InterfacedActorRef should have valid IActorRef target."); var actorId = BindActor(targetActor, new[] { new BoundType(actor.InterfaceType) }, bindingFlags); if (actorId == 0) return null; return actor; }
InterfacedActorRef IActorBoundGatewaySync.OpenChannel(InterfacedActorRef actor, object tag, ActorBindingFlags bindingFlags) { var targetActor = actor.CastToIActorRef(); if (targetActor == null) { throw new ArgumentNullException(nameof(actor)); } var target = ((IActorBoundGatewaySync)this).OpenChannel(targetActor, new TaggedType[] { actor.InterfaceType }, bindingFlags); var actorRef = (InterfacedActorRef)Activator.CreateInstance(actor.GetType()); InterfacedActorRefModifier.SetTarget(actorRef, target); return(actorRef); }
InterfacedActorRef IActorBoundChannelSync.BindActor(InterfacedActorRef actor, ActorBindingFlags bindingFlags) { if (actor == null) { throw new ArgumentNullException(nameof(actor)); } var targetActor = actor.CastToIActorRef(); if (targetActor == null) { throw new ArgumentException("InterfacedActorRef should have valid IActorRef target."); } var actorId = BindActor(targetActor, new[] { new BoundType(actor.InterfaceType) }, bindingFlags); if (actorId == 0) { return(null); } return(actor); }
InterfacedActorRef IActorBoundGatewaySync.OpenChannel(InterfacedActorRef actor, object tag, ActorBindingFlags bindingFlags) { var targetActor = actor.CastToIActorRef(); if (targetActor == null) throw new ArgumentNullException(nameof(actor)); var target = ((IActorBoundGatewaySync)this).OpenChannel(targetActor, new TaggedType[] { actor.InterfaceType }, bindingFlags); var actorRef = (InterfacedActorRef)Activator.CreateInstance(actor.GetType()); InterfacedActorRefModifier.SetTarget(actorRef, target); return actorRef; }
InterfacedActorRef IActorBoundChannelSync.BindActor(InterfacedActorRef actor, ActorBindingFlags bindingFlags) { if (actor == null) throw new ArgumentNullException(nameof(actor)); var targetActor = actor.CastToIActorRef(); if (targetActor == null) throw new ArgumentException("InterfacedActorRef should have valid IActorRef target."); var actorId = BindActor(targetActor, new[] { new BoundType(actor.InterfaceType) }, bindingFlags); if (actorId == 0) return null; var actorRef = (InterfacedActorRef)Activator.CreateInstance(actor.GetType()); InterfacedActorRefModifier.SetTarget(actorRef, new BoundActorTarget(actorId)); return actorRef; }
public static bool IsChannelConnected(this InterfacedActorRef actorRef) { var channel = actorRef.RequestWaiter as IChannel; return(channel.State == ChannelStateType.Connected); }
public static Task <bool> ConnectChannelAsync(this InterfacedActorRef actorRef) { var channel = actorRef.RequestWaiter as IChannel; return(channel.ConnectAsync()); }