public async Task Invoke(ITransportReceiveContext context, Func <ITransportReceiveContext, Task> next)
        {
            await next(context).ConfigureAwait(false);

            var subscriptionMessageType = GetSubscriptionMessageTypeFrom(context.Message);

            if (subscriptionMessageType != null)
            {
                if (!context.Message.Headers.TryGetValue(Headers.SubscriberTransportAddress, out var returnAddress))
                {
                    context.Message.Headers.TryGetValue(Headers.ReplyToAddress, out returnAddress);
                }

                if (!context.Message.Headers.TryGetValue(Headers.SubscriberEndpoint, out var endpointName))
                {
                    endpointName = string.Empty;
                }

                var intent = (MessageIntentEnum)Enum.Parse(typeof(MessageIntentEnum), context.Message.Headers[Headers.MessageIntent], true);
                if (intent != intentToHandle)
                {
                    return;
                }

                action(new SubscriptionEventArgs
                {
                    MessageType             = subscriptionMessageType,
                    SubscriberReturnAddress = returnAddress,
                    SubscriberEndpoint      = endpointName
                }, scenarioContext);
            }
        }
        /// <summary>
        /// Creates a <see cref="IIncomingPhysicalMessageContext" /> based on the current context.
        /// </summary>
        public static IIncomingPhysicalMessageContext CreateIncomingPhysicalMessageContext(this StageConnector<ITransportReceiveContext, IIncomingPhysicalMessageContext> stageConnector, IncomingMessage incomingMessage, ITransportReceiveContext sourceContext)
        {
            Guard.AgainstNull(nameof(incomingMessage), incomingMessage);
            Guard.AgainstNull(nameof(sourceContext), sourceContext);

            return new IncomingPhysicalMessageContext(incomingMessage, sourceContext);
        }
        /// <summary>
        /// Creates a <see cref="IRoutingContext" /> based on the current context.
        /// </summary>
        public static IRoutingContext CreateRoutingContext(this ForkConnector<ITransportReceiveContext, IRoutingContext> forkConnector, OutgoingMessage outgoingMessage, string localAddress, ITransportReceiveContext sourceContext)
        {
            Guard.AgainstNull(nameof(outgoingMessage), outgoingMessage);
            Guard.AgainstNullAndEmpty(nameof(localAddress), localAddress);
            Guard.AgainstNull(nameof(sourceContext), sourceContext);

            return new RoutingContext(outgoingMessage, new UnicastRoutingStrategy(localAddress), sourceContext);
        }
Example #4
0
            public async Task Invoke(ITransportReceiveContext context, Func <ITransportReceiveContext, Task> next)
            {
                await next(context).ConfigureAwait(false);

                var subscriptionMessageType = GetSubscriptionMessageTypeFrom(context.Message);

                if (subscriptionMessageType != null)
                {
                    if (!context.Message.Headers.TryGetValue(Headers.SubscriberTransportAddress, out var returnAddress))
                    {
                        context.Message.Headers.TryGetValue(Headers.ReplyToAddress, out returnAddress);
                    }
                    action(new SubscriptionEventArgs
                    {
                        MessageType             = subscriptionMessageType,
                        SubscriberReturnAddress = returnAddress
                    }, scenarioContext);
                }
            }
 Task Invoke(ITransportReceiveContext context)
 {
     return(behavior.Invoke(context, c => TaskEx.CompletedTask));
 }
        /// <summary>
        /// Creates a <see cref="IIncomingPhysicalMessageContext" /> based on the current context.
        /// </summary>
        public static IIncomingPhysicalMessageContext CreateIncomingPhysicalMessageContext(this StageConnector <ITransportReceiveContext, IIncomingPhysicalMessageContext> stageConnector, IncomingMessage incomingMessage, ITransportReceiveContext sourceContext)
        {
            Guard.AgainstNull(nameof(incomingMessage), incomingMessage);
            Guard.AgainstNull(nameof(sourceContext), sourceContext);

            return(new IncomingPhysicalMessageContext(incomingMessage, sourceContext));
        }
        internal static IIncomingPhysicalMessageContext CreateIncomingPhysicalMessageContext(this IStageForkConnector <ITransportReceiveContext, IIncomingPhysicalMessageContext, IBatchDispatchContext> stageForkConnector, IncomingMessage incomingMessage, ITransportReceiveContext sourceContext)
        {
            _ = stageForkConnector;

            return(new IncomingPhysicalMessageContext(incomingMessage, sourceContext));
        }
        /// <summary>
        /// Creates a <see cref="IRoutingContext" /> based on the current context.
        /// </summary>
        public static IRoutingContext CreateRoutingContext(this ForkConnector <ITransportReceiveContext, IRoutingContext> forkConnector, OutgoingMessage outgoingMessage, string localAddress, ITransportReceiveContext sourceContext)
        {
            Guard.AgainstNull(nameof(outgoingMessage), outgoingMessage);
            Guard.AgainstNullAndEmpty(nameof(localAddress), localAddress);
            Guard.AgainstNull(nameof(sourceContext), sourceContext);

            return(new RoutingContext(outgoingMessage, new UnicastRoutingStrategy(localAddress), sourceContext));
        }
 internal static IIncomingPhysicalMessageContext CreateIncomingPhysicalMessageContext(this IStageForkConnector<ITransportReceiveContext, IIncomingPhysicalMessageContext, IBatchDispatchContext> stageForkConnector, IncomingMessage incomingMessage, ITransportReceiveContext sourceContext)
 {
     return new IncomingPhysicalMessageContext(incomingMessage, sourceContext);
 }