Esempio n. 1
0
        public AdapterDataFlow(
            ILogger <AdapterDataFlow> logger,
            IMessageDumper messageDumper,
            ITransmitterAdapterHost transmitterHost,
            TranslationSubscriptionCollection subscriptions,
            ITransmitterCommandsFactory transmitterCommandsFactory,
            AdapterConfiguration adapterConfiguration
            )
        {
            this.logger                     = logger;
            this.messageDumper              = messageDumper;
            this.transmitterHost            = transmitterHost;
            this.subscriptions              = subscriptions;
            this.transmitterCommandsFactory = transmitterCommandsFactory;
            this.adapterConfiguration       = adapterConfiguration;

            // Flow 1-1
            adaptApiMessageBlock
                = new TransformManyBlock <MessageContext <ApiResponseParsed>, MessageContext <AdaptMessage> >(
                      AdaptApiMessageHandler,
                      new ExecutionDataflowBlockOptions()
            {
                MaxDegreeOfParallelism = maxDegreeOfParallelism
            }
                      );

            // Flow 1-2
            adaptFeedMessageBlock
                = new TransformManyBlock <MessageContext <FeedMessageReady>, MessageContext <AdaptMessage> >(
                      AdaptFeedMessageHandler,
                      new ExecutionDataflowBlockOptions()
            {
                MaxDegreeOfParallelism = maxDegreeOfParallelism
            }
                      );

            // Flow 2
            createTransmitterCommandsBlock = new TransformManyBlock <MessageContext <AdaptMessage>, MessageContext <ITransmitterCommand> >(
                CreateTransmitterCommandsHandler,
                new ExecutionDataflowBlockOptions()
            {
                MaxDegreeOfParallelism = maxDegreeOfParallelism
            }
                );


            // Flow 3
            broadcastTransmitterCommandBlock = new BroadcastBlock <MessageContext <ITransmitterCommand> >(t => t);

            // Flow 4-1
            sendCommandBlock
                = new ActionBlock <MessageContext <ITransmitterCommand> > (
                      SendCommandHandler,
                      new ExecutionDataflowBlockOptions()
            {
                MaxDegreeOfParallelism = maxDegreeOfParallelism
            }
                      );

            // Flow 4-2
            writeDumpBlock
                = new ActionBlock <MessageContext <ITransmitterCommand> >(
                      WriteDumpHandler,
                      new ExecutionDataflowBlockOptions()
            {
                MaxDegreeOfParallelism = maxDegreeOfParallelism
            }
                      );

            adaptApiMessageBlock.LinkTo(createTransmitterCommandsBlock);
            adaptFeedMessageBlock.LinkTo(createTransmitterCommandsBlock);

            createTransmitterCommandsBlock.LinkTo(broadcastTransmitterCommandBlock);

            broadcastTransmitterCommandBlock.LinkTo(sendCommandBlock);
            broadcastTransmitterCommandBlock.LinkTo(writeDumpBlock);
        }
        public AdapterDataFlow(
            ILogger <AdapterDataFlow> logger,
            IMessageDumper messageDumper,
            ITransmitterAdapterHost transmitterHost,
            TranslationSubscriptionCollection subscriptions,
            ITransmitterCommandsFactory transmitterCommandsFactory,
            AdapterConfiguration adapterConfiguration
            )
        {
            this.logger                     = logger;
            this.messageDumper              = messageDumper;
            this.transmitterHost            = transmitterHost;
            this.subscriptions              = subscriptions;
            this.transmitterCommandsFactory = transmitterCommandsFactory;
            this.adapterConfiguration       = adapterConfiguration;

            // Flow 1-1
            translationCheckBlock
                = new TransformManyBlock <MessageContext <Translation>,
                                          MessageContext <Translation> >(
                      TranslationCheckHandler,
                      new ExecutionDataflowBlockOptions()
            {
                MaxDegreeOfParallelism = maxDegreeOfParallelism
            }
                      );

            // Flow 1-2
            eventMessageTransformBlock
                = new TransformManyBlock <MessageContext <EventsMessage>,
                                          MessageContext <EventData, TranslationSubscription> >(
                      EventMessageTransformHandler,
                      new ExecutionDataflowBlockOptions()
            {
                MaxDegreeOfParallelism = maxDegreeOfParallelism
            }
                      );

            // Flow 2-1
            translationCreateCommandBlock
                = new TransformManyBlock <MessageContext <Translation>,
                                          MessageContext <ITransmitterCommand, string> >(
                      TranslationCreateCommandHandler,
                      new ExecutionDataflowBlockOptions()
            {
                MaxDegreeOfParallelism = maxDegreeOfParallelism
            }
                      );

            // Flow 2-2
            eventDataCreateCommandBlock
                = new TransformManyBlock <MessageContext <EventData, TranslationSubscription>,
                                          MessageContext <ITransmitterCommand, string> >(
                      EventDataCreateCommandHandler,
                      new ExecutionDataflowBlockOptions()
            {
                MaxDegreeOfParallelism = maxDegreeOfParallelism
            }
                      );

            // Flow 2-3
            pingMessageCreateCommandBlock
                = new TransformManyBlock <MessageContext <PingMessage>,
                                          MessageContext <ITransmitterCommand, string> >(
                      PingMessageCreateCommandHandler,
                      new ExecutionDataflowBlockOptions()
            {
                MaxDegreeOfParallelism = maxDegreeOfParallelism
            }
                      );

            // Flow 3
            sendCommandBlock
                = new TransformManyBlock <MessageContext <ITransmitterCommand, string>,
                                          MessageContext <ITransmitterCommand, string> > (
                      SendCommandHandler,
                      new ExecutionDataflowBlockOptions()
            {
                MaxDegreeOfParallelism = maxDegreeOfParallelism
            }
                      );

            // Flow 3
            writeDumpBlock
                = new ActionBlock <MessageContext <ITransmitterCommand, string> >(
                      WriteDumpHandler,
                      new ExecutionDataflowBlockOptions()
            {
                MaxDegreeOfParallelism = maxDegreeOfParallelism
            }
                      );

            translationCheckBlock.LinkTo(translationCreateCommandBlock);
            eventMessageTransformBlock.LinkTo(eventDataCreateCommandBlock);

            translationCreateCommandBlock.LinkTo(sendCommandBlock);
            eventDataCreateCommandBlock.LinkTo(sendCommandBlock);
            pingMessageCreateCommandBlock.LinkTo(sendCommandBlock);

            sendCommandBlock.LinkTo(writeDumpBlock);
        }
 public TransmitterAdapterHostService(
     ITransmitterAdapterHost transmitterHost
     )
 {
     this.transmitterHost = transmitterHost;
 }