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);
        }
Exemple #3
0
        // 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);
        }
Exemple #6
0
        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());
        }