Пример #1
0
        private async Task <IServiceRemotingResponseMessage> HandleActorMethodDispatchAsync(
            IActorRemotingMessageHeaders messageHeaders, IServiceRemotingRequestMessageBody msgBody)
        {
            var startTime = DateTime.UtcNow;

            if (this.IsCancellationRequest(messageHeaders))
            {
                await this.cancellationHelper.CancelRequestAsync(
                    messageHeaders.InterfaceId,
                    messageHeaders.MethodId,
                    messageHeaders.InvocationId);

                return(null);
            }
            else
            {
                IServiceRemotingResponseMessageBody retVal;
                this.actorService.ActorManager.DiagnosticsEventManager.ActorRequestProcessingStart();
                try
                {
                    retVal = await this.cancellationHelper.DispatchRequest(
                        messageHeaders.InterfaceId,
                        messageHeaders.MethodId,
                        messageHeaders.InvocationId,
                        cancellationToken => this.OnDispatch(messageHeaders, msgBody,
                                                             cancellationToken));
                }
                finally
                {
                    this.actorService.ActorManager.DiagnosticsEventManager.ActorRequestProcessingFinish(startTime);
                }
                return(new ServiceRemotingResponseMessage(null, retVal));
            }
        }
Пример #2
0
        public void HandleOneWayMessage(IServiceRemotingRequestMessage requestMessage)
        {
            IActorRemotingMessageHeaders actorHeaders = (IActorRemotingMessageHeaders)requestMessage.GetHeader();

            ActorMethodDispatcherBase eventDispatcher;

            if ((this.eventIdToDispatchersMap == null) ||
                (!this.eventIdToDispatchersMap.TryGetValue(actorHeaders.InterfaceId, out eventDispatcher)))
            {
                return;
            }

            SubscriptionInfo info;

            if (!this.subscriptionIdToInfoMap.TryGetValue(actorHeaders.ActorId.GetGuidId(), out info))
            {
                return;
            }

            if (info.Subscriber.EventId != actorHeaders.InterfaceId)
            {
                return;
            }

            try
            {
                eventDispatcher.Dispatch(info.Subscriber.Instance, actorHeaders.MethodId, requestMessage.GetBody());
            }
            catch
            {
                // ignored
            }
        }
Пример #3
0
 private Task <IServiceRemotingResponseMessageBody> OnDispatch(
     IActorRemotingMessageHeaders actorMessageHeaders,
     IServiceRemotingRequestMessageBody requestBody,
     CancellationToken cancellationToken)
 {
     return(this.actorService.ActorManager
            .InvokeAsync(
                actorMessageHeaders.ActorId,
                actorMessageHeaders.InterfaceId,
                actorMessageHeaders.MethodId,
                actorMessageHeaders.CallContext,
                requestBody,
                this.GetRemotingMessageBodyFactory(),
                cancellationToken));
 }
Пример #4
0
        private async Task <IServiceRemotingResponseMessageBody> HandleActorMethodDispatchAsync(
            IActorRemotingMessageHeaders actorMessageHeaders, IServiceRemotingRequestMessageBody msgBody,
            CancellationToken cancellationToken)
        {
            var startTime = DateTime.UtcNow;
            IServiceRemotingResponseMessageBody retVal;

            this.actorService.ActorManager.DiagnosticsEventManager.ActorRequestProcessingStart();
            try
            {
                retVal = await this.OnDispatch(actorMessageHeaders, msgBody,
                                               cancellationToken);
            }
            finally
            {
                this.actorService.ActorManager.DiagnosticsEventManager.ActorRequestProcessingFinish(startTime);
            }
            return(retVal);
        }