public static async Task <IRequestTarget> BindActorOrOpenChannel( this ActorBoundChannelRef channel, IActorRef actor, TaggedType[] types, ActorBindingFlags bindingFlags, string gatewayName, object tag, ActorBindingFlags bindingFlagsForOpenChannel) { if (string.IsNullOrEmpty(gatewayName) || (channel != null && channel.CastToIActorRef().Path.Address == actor.Path.Address)) { // link an actor to channel directly return(await channel.BindActor(actor, types, bindingFlags)); } else { // grant client to access an actor via gateway var gatewayRef = ((InternalActorRefBase)actor).Provider.ResolveActorRef(actor.Path.Root / "user" / gatewayName); var gateway = new ActorBoundGatewayRef(new AkkaReceiverTarget(gatewayRef)); return(await gateway.WithTimeout(TimeSpan.FromSeconds(10)).OpenChannel(actor, types, tag, bindingFlagsForOpenChannel)); } }
public static async Task<IRequestTarget> BindActorOrOpenChannel( this ActorBoundChannelRef channel, IActorRef actor, TaggedType[] types, ActorBindingFlags bindingFlags, string gatewayName, object tag, ActorBindingFlags bindingFlagsForOpenChannel) { if (string.IsNullOrEmpty(gatewayName) || (channel != null && channel.CastToIActorRef().Path.Address == actor.Path.Address)) { // link an actor to channel directly return await channel.BindActor(actor, types, bindingFlags); } else { // grant client to access an actor via gateway var gatewayRef = ((InternalActorRefBase)actor).Provider.ResolveActorRef(actor.Path.Root / "user" / gatewayName); var gateway = new ActorBoundGatewayRef(new AkkaReceiverTarget(gatewayRef)); return await gateway.WithTimeout(TimeSpan.FromSeconds(10)).OpenChannel(actor, types, tag, bindingFlagsForOpenChannel); } }