Ejemplo n.º 1
0
        public UnsubscribeAction Connect(IInboundPipelineConfigurator configurator, object instance)
        {
            var consumer = instance as TConsumer;

            if (consumer == null)
            {
                throw new NullReferenceException("The consumer instance cannot be null.");
            }

            var correlatedConfigurator = new InboundCorrelatedMessageRouterConfigurator(configurator.Pipeline);

            CorrelatedMessageRouter <IConsumeContext <TMessage>, TMessage, TKey> router =
                correlatedConfigurator.FindOrCreate <TMessage, TKey>();

            var sink = new InstanceMessageSink <TMessage>(MultipleHandlerSelector.ForHandler(
                                                              HandlerSelector.ForHandler <TMessage>(consumer.Consume)));

            TKey correlationId = consumer.CorrelationId;

            UnsubscribeAction result = router.Connect(correlationId, sink);

            UnsubscribeAction remove = configurator.SubscribedTo <TMessage, TKey>(correlationId);

            return(() => result() && (router.SinkCount(correlationId) == 0) && remove());
        }
Ejemplo n.º 2
0
        public bool Inspect <TMessage, TKey>(CorrelatedMessageRouter <TMessage, TKey> sink)
            where TMessage : class, CorrelatedBy <TKey>
        {
            Append(string.Format("Correlated by {1} ({0})", typeof(TMessage).Name, typeof(TKey).Name));

            return(true);
        }
Ejemplo n.º 3
0
        public bool Inspect <T, TMessage, TKey>(CorrelatedMessageRouter <T, TMessage, TKey> sink)
            where TMessage : class, CorrelatedBy <TKey>
            where T : class, IMessageContext <TMessage>
        {
            Append(string.Format("Correlated by {1} ({0})", GetMessageName <TMessage>(), typeof(TKey).ToFriendlyName()));

            return(true);
        }
Ejemplo n.º 4
0
        public bool Inspect <TRoutedMessage, TRoutedKey>(CorrelatedMessageRouter <TRoutedMessage, TRoutedKey> element)
            where TRoutedMessage : class, CorrelatedBy <TRoutedKey>
        {
            if (typeof(TRoutedMessage) == typeof(TMessage))
            {
                Router = element.TranslateTo <CorrelatedMessageRouter <TMessage, TKey> >();

                return(false);
            }

            return(true);
        }
        public bool Inspect <T, TM, TK>(CorrelatedMessageRouter <T, TM, TK> router)
            where T : class, IMessageContext <TM>
            where TM : class, ICorrelatedBy <TK>
        {
            if (typeof(T) == typeof(IConsumeContext <TMessage>) && typeof(TM) == typeof(TMessage) &&
                typeof(TK) == typeof(TKey))
            {
                Router = router.TranslateTo <CorrelatedMessageRouter <IConsumeContext <TMessage>, TMessage, TKey> >();

                return(false);
            }

            return(true);
        }
Ejemplo n.º 6
0
        private static CorrelatedMessageRouter <TMessage, TKey> ConfigureRouter <TMessage, TKey>(MessageRouter <TMessage> messageRouter)
            where TMessage : class, CorrelatedBy <TKey>
        {
            if (messageRouter == null)
            {
                throw new PipelineException("The base object router was not found");
            }

            var router = new CorrelatedMessageRouter <TMessage, TKey>();

            messageRouter.Connect(router);

            return(router);
        }
Ejemplo n.º 7
0
        public static UnsubscribeAction ConnectEndpoint <TMessage, TKey>(this IOutboundMessagePipeline pipeline,
                                                                         TKey correlationId,
                                                                         IEndpoint endpoint)
            where TMessage : class, ICorrelatedBy <TKey>
        {
            var correlatedConfigurator = new OutboundCorrelatedMessageRouterConfigurator(pipeline);

            CorrelatedMessageRouter <IBusPublishContext <TMessage>, TMessage, TKey> router =
                correlatedConfigurator.FindOrCreate <TMessage, TKey>();

            UnsubscribeAction result = router.Connect(correlationId, new EndpointMessageSink <TMessage>(endpoint));

            return(result);
        }
Ejemplo n.º 8
0
        static CorrelatedMessageRouter <IConsumeContext <TMessage>, TMessage, TKey> ConfigureRouter <TMessage, TKey>(
            MessageRouter <IConsumeContext <TMessage> > inputRouter)
            where TMessage : class, CorrelatedBy <TKey>
        {
            if (inputRouter == null)
            {
                throw new PipelineException("The input router was not found");
            }

            var outputRouter = new CorrelatedMessageRouter <IConsumeContext <TMessage>, TMessage, TKey>();

            inputRouter.Connect(outputRouter);

            return(outputRouter);
        }