Exemplo n.º 1
0
        private string GetActorMethodName(ActorMessageHeaders actorMessageHeaders)
        {
            if (actorMessageHeaders == null)
            {
                return(null);
            }
            try
            {
                var methodName = "-";
                var lookup     = HashUtil.Combine(actorMessageHeaders.InterfaceId, actorMessageHeaders.MethodId);

                if (ActorMethodMap.ContainsKey(lookup))
                {
                    methodName = ActorMethodMap[lookup];
                    return(methodName);
                }

                methodName = _actorMethodDispatcher.GetMethodDispatcherMapName(
                    actorMessageHeaders.InterfaceId, actorMessageHeaders.MethodId);
                ActorMethodMap[lookup] = methodName;
                return(methodName);
            }
            catch (Exception ex)
            {
                // ignored
                //_logger?.FailedToGetActorMethodName(actorMessageHeaders, ex);
            }
            return(null);
        }
        internal Task UnsubscribeAsync(int eventInterfaceId, Guid subscriberId)
        {
            var headers = new ActorMessageHeaders
            {
                ActorId     = this.actorId,
                InterfaceId = ActorEventSubscription.InterfaceId,
                MethodId    = ActorEventSubscription.UnSubscribeMethodId,
            };

            var serviceMessageHeaders = headers.ToServiceMessageHeaders();

            serviceMessageHeaders.InterfaceId = ActorEventSubscription.InterfaceId;
            serviceMessageHeaders.MethodId    = ActorEventSubscription.UnSubscribeMethodId;

            var msgBody = new ActorMessageBody()
            {
                Value = new EventSubscriptionRequestBody()
                {
                    eventInterfaceId = eventInterfaceId,
                    subscriptionId   = subscriberId
                }
            };

            var msgBodyBytes = SerializationUtility.Serialize(ActorEventSubscription.Serializer, msgBody);

            return(this.InvokeWithRetryAsync(
                       client => client.RequestResponseAsync(serviceMessageHeaders, msgBodyBytes),
                       CancellationToken.None));
        }
Exemplo n.º 3
0
        private static ActorMessageHeaders GetActorMessageHeaders(ServiceRemotingMessageHeaders messageHeaders)
        {
            ActorMessageHeaders actorMessageHeaders = null;

            if (ActorMessageHeaders.TryFromServiceMessageHeaders(messageHeaders, out actorMessageHeaders))
            {
            }
            return(actorMessageHeaders);
        }
        internal Task <byte[]> InvokeAsync(ActorMessageHeaders headers, byte[] requestMsgBody, CancellationToken cancellationToken)
        {
            var serviceMessageHeaders = headers.ToServiceMessageHeaders();

            serviceMessageHeaders.InterfaceId = ActorMessageDispatch.InterfaceId;

            return(this.InvokeAsync(
                       serviceMessageHeaders,
                       requestMsgBody,
                       cancellationToken));
        }
Exemplo n.º 5
0
 private Task <byte[]> OnDispatch(
     ActorMessageHeaders actorMessageHeaders,
     byte[] requestBodyBytes,
     CancellationToken cancellationToken)
 {
     return(this.actorService.ActorManager.InvokeAsync(
                actorMessageHeaders.ActorId,
                actorMessageHeaders.InterfaceId,
                actorMessageHeaders.MethodId,
                actorMessageHeaders.CallContext,
                requestBodyBytes,
                cancellationToken));
 }
Exemplo n.º 6
0
        internal override Task <byte[]> InvokeAsync(
            int interfaceId,
            int methodId,
            byte[] requestMsgBodyBytes,
            CancellationToken cancellationToken)
        {
            var actorMsgHeaders = new ActorMessageHeaders()
            {
                ActorId     = this.servicePartitionClient.ActorId,
                InterfaceId = interfaceId,
                MethodId    = methodId,
                CallContext = GetCallContext()
            };

            return(this.servicePartitionClient.InvokeAsync(actorMsgHeaders, requestMsgBodyBytes, cancellationToken));
        }
Exemplo n.º 7
0
        private async Task <byte[]> HandleSubscriptionRequestsAsync(
            IServiceRemotingRequestContext requestContext,
            ServiceRemotingMessageHeaders messageHeaders,
            byte[] requestMsgBodyBytes)
        {
            ActorMessageHeaders actorMessageHeaders;

            if (!ActorMessageHeaders.TryFromServiceMessageHeaders(messageHeaders, out actorMessageHeaders))
            {
                //This can only happen if there is issue in our product code like Message Corruption or changing headers format.
                ReleaseAssert.Failfast("ActorMessageHeaders Deserialization failed");
            }

            if (actorMessageHeaders.MethodId == ActorEventSubscription.SubscribeMethodId)
            {
                var requestMsgBody       = (ActorMessageBody)SerializationUtility.Deserialize(ActorEventSubscription.Serializer, requestMsgBodyBytes);
                var castedRequestMsgBody = (EventSubscriptionRequestBody)requestMsgBody.Value;

                await this.actorService.ActorManager.SubscribeAsync(
                    actorMessageHeaders.ActorId,
                    castedRequestMsgBody.eventInterfaceId,
                    new ActorEventSubscriberProxy(
                        castedRequestMsgBody.subscriptionId,
                        requestContext.GetCallbackClient()));

                return(null);
            }

            if (actorMessageHeaders.MethodId == ActorEventSubscription.UnSubscribeMethodId)
            {
                var requestMsgBody       = (ActorMessageBody)SerializationUtility.Deserialize(ActorEventSubscription.Serializer, requestMsgBodyBytes);
                var castedRequestMsgBody = (EventSubscriptionRequestBody)requestMsgBody.Value;

                await this.actorService.ActorManager.UnsubscribeAsync(
                    actorMessageHeaders.ActorId,
                    castedRequestMsgBody.eventInterfaceId,
                    castedRequestMsgBody.subscriptionId);

                return(null);
            }

            throw new MissingMethodException(string.Format(CultureInfo.CurrentCulture, Actors.SR.ErrorInvalidMethodId, actorMessageHeaders.MethodId));
        }
Exemplo n.º 8
0
        private async Task <byte[]> HandleSubscriptionRequests(
            IServiceRemotingRequestContext requestContext,
            ServiceRemotingMessageHeaders messageHeaders,
            byte[] requestMsgBodyBytes)
        {
            ActorMessageHeaders actorMessageHeaders;

            if (!ActorMessageHeaders.TryFromServiceMessageHeaders(messageHeaders, out actorMessageHeaders))
            {
                throw new SerializationException(Actors.SR.ErrorActorMessageHeadersDeserializationFailed);
            }

            if (actorMessageHeaders.MethodId == ActorEventSubscription.SubscribeMethodId)
            {
                var requestMsgBody       = (ActorMessageBody)SerializationUtility.Deserialize(ActorEventSubscription.Serializer, requestMsgBodyBytes);
                var castedRequestMsgBody = (EventSubscriptionRequestBody)requestMsgBody.Value;

                await this.actorService.ActorManager.SubscribeAsync(
                    actorMessageHeaders.ActorId,
                    castedRequestMsgBody.eventInterfaceId,
                    new ActorEventSubscriberProxy(
                        castedRequestMsgBody.subscriptionId,
                        requestContext.GetCallbackClient()));

                return(null);
            }

            if (actorMessageHeaders.MethodId == ActorEventSubscription.UnSubscribeMethodId)
            {
                var requestMsgBody       = (ActorMessageBody)SerializationUtility.Deserialize(ActorEventSubscription.Serializer, requestMsgBodyBytes);
                var castedRequestMsgBody = (EventSubscriptionRequestBody)requestMsgBody.Value;

                await this.actorService.ActorManager.UnsubscribeAsync(
                    actorMessageHeaders.ActorId,
                    castedRequestMsgBody.eventInterfaceId,
                    castedRequestMsgBody.subscriptionId);

                return(null);
            }

            throw new MissingMethodException(string.Format(CultureInfo.CurrentCulture, Actors.SR.ErrorInvalidMethodId, actorMessageHeaders.MethodId));
        }
Exemplo n.º 9
0
        private async Task <byte[]> HandleActorMethodDispatchAsync(
            ServiceRemotingMessageHeaders messageHeaders,
            byte[] requestMsgBodyBytes)
        {
            var startTime = DateTime.UtcNow;
            ActorMessageHeaders actorMessageHeaders;

            if (!ActorMessageHeaders.TryFromServiceMessageHeaders(messageHeaders, out actorMessageHeaders))
            {
                throw new SerializationException(Actors.SR.ErrorActorMessageHeadersDeserializationFailed);
            }

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

                return(null);
            }
            else
            {
                byte[] retVal;
                this.actorService.ActorManager.DiagnosticsEventManager.ActorRequestProcessingStart();
                try
                {
                    retVal = await this.cancellationHelper.DispatchRequest(
                        actorMessageHeaders.InterfaceId,
                        actorMessageHeaders.MethodId,
                        messageHeaders.InvocationId,
                        cancellationToken => this.OnDispatch(actorMessageHeaders, requestMsgBodyBytes, cancellationToken));
                }
                finally
                {
                    this.actorService.ActorManager.DiagnosticsEventManager.ActorRequestProcessingFinish(startTime);
                }
                return(retVal);
            }
        }
Exemplo n.º 10
0
        public void OneWayMessage(ServiceRemotingMessageHeaders serviceMessageHeaders, byte[] requestBody)
        {
            ActorMessageHeaders actorHeaders;

            if (!ActorMessageHeaders.TryFromServiceMessageHeaders(serviceMessageHeaders, out actorHeaders))
            {
                return;
            }

            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
            {
                var eventMsgBody = eventDispatcher.DeserializeRequestMessageBody(requestBody);
                eventDispatcher.Dispatch(info.Subscriber.Instance, actorHeaders.MethodId, eventMsgBody);
            }
            catch
            {
                // ignored
            }
        }
 public void FailedToGetActorMethodName(ActorMessageHeaders actorMessageHeaders, Exception ex)
 {
     throw new NotImplementedException();
 }
 public void RecieveActorMessageFailed(Uri requestUri, string actorMethodName, ActorMessageHeaders actorMessageHeaders,
                                       CustomServiceRequestHeader customServiceRequestHeader, Exception ex)
 {
     throw new NotImplementedException();
 }
 public IDisposable RecieveActorMessage(Uri requestUri, string actorMethodName, ActorMessageHeaders actorMessageHeaders,
                                        CustomServiceRequestHeader customServiceRequestHeader)
 {
     throw new NotImplementedException();
 }
Exemplo n.º 14
0
        private Task <byte[]> RequestActorResponseAsync(ServiceRemotingMessageHeaders messageHeaders, ActorMessageHeaders actorMessageHeaders, CustomServiceRequestHeader customServiceRequestHeader, byte[] requestBody)
        {
            var methodName = GetActorMethodName(actorMessageHeaders);

            using (Logger.CallActor(ServiceUri, methodName, actorMessageHeaders, customServiceRequestHeader))
            {
                try
                {
                    var result = this.InnerClient.RequestResponseAsync(messageHeaders, requestBody);
                    return(result);
                }
                catch (Exception ex)
                {
                    Logger.CallActorFailed(ServiceUri, methodName, actorMessageHeaders, customServiceRequestHeader, ex);
                    throw;
                }
            }
        }