public FeedManager(
     ILogger <FeedManager> logger,
     IWebSocketClient webSocketClient,
     IMessageDumper messageDumper
     )
 {
     this.logger          = logger;
     this.webSocketClient = webSocketClient;
     this.messageDumper   = messageDumper;
 }
        public FeedListenerFlow(
            ILogger <FeedListenerFlow> logger,
            IMessageDumper messageDumper,
            IWebSocketMessageParser webSocketMessageParser,
            IProviderAdapter providerAdapter,
            IFeedSubscriber <TranslationState> feedSubscriber,
            TranslationSubscriptionCollection subscriptions
            )
        {
            this.logger                 = logger;
            this.messageDumper          = messageDumper;
            this.webSocketMessageParser = webSocketMessageParser;
            this.providerAdapter        = providerAdapter;
            this.feedSubscriber         = feedSubscriber;
            this.subscriptions          = subscriptions;

            // 1
            parseFeedMessageTransformManyBlock
                = new TransformManyBlock <MessageContext <string>, MessageContext <object, string> >(ParseFeedMessageHandler);

            // 2
            messageRouterBlock
                = new ActionBlock <MessageContext <object, string> >(MessageRouterHandler);

            // 3-1
            startSubscribingActionBlock
                = new ActionBlock <MessageContext <LoginResponseMessage> >(StartSubscribingHandler);

            // 3-2
            translationToAdapterActionBlock
                = new ActionBlock <MessageContext <Translation> >(TranslationToAdapterHandler);

            // 3-3
            eventsDataToAdapterActionBlock
                = new ActionBlock <MessageContext <EventsMessage> >(EventsDataToAdapterHandler);

            // 3-4
            pingToAdapterActionBlock
                = new ActionBlock <MessageContext <PingMessage> >(PingToAdapterHandler);

            // Building flow
            parseFeedMessageTransformManyBlock.LinkTo(messageRouterBlock);
        }
Example #3
0
        public ProviderManagerFlow(
            ILogger <ProviderManagerFlow> logger,
            IMessageDumper messageDumper,

            HttpClientManager httpClientManager,
            IHttpRequestMessageFactory httpRequestMessageFactory,
            ITranslationDistributer translationDistributer
            )
        {
            this.logger                    = logger;
            this.messageDumper             = messageDumper;
            this.httpClientManager         = httpClientManager;
            this.httpRequestMessageFactory = httpRequestMessageFactory;
            this.translationDistributer    = translationDistributer;
            createHttpRequestBlock
                = new TransformManyBlock <MessageContext <TranslationsRequest>, MessageContext <HttpRequestMessage> >(
                      CreateHttpRequestHandler,
                      new ExecutionDataflowBlockOptions()
            {
                MaxDegreeOfParallelism = maxDegreeOfParallelism
            }
                      );

            execHttpRequestBlock
                = new TransformManyBlock <MessageContext <HttpRequestMessage>, MessageContext <HttpResponseMessage> >(
                      ExecHttpRequestHandler,
                      new ExecutionDataflowBlockOptions()
            {
                MaxDegreeOfParallelism = maxDegreeOfParallelism
            }
                      );

            parseHttpResponseBlock
                = new TransformManyBlock <MessageContext <HttpResponseMessage>, MessageContext <string> >(
                      ParseHttpResponseHandler,
                      new ExecutionDataflowBlockOptions()
            {
                MaxDegreeOfParallelism = maxDegreeOfParallelism
            }
                      );

            broadcastResponseBlock = new BroadcastBlock <MessageContext <string> >(t => t);

            dumpResponseBlock
                = new ActionBlock <MessageContext <string> >(
                      DumpResponseHandler,
                      new ExecutionDataflowBlockOptions()
            {
                MaxDegreeOfParallelism = maxDegreeOfParallelism
            }
                      );

            deserializeResponseBlock
                = new TransformManyBlock <MessageContext <string>, MessageContext <Translation> >(
                      DeserializeResponseHandler,
                      new ExecutionDataflowBlockOptions()
            {
                MaxDegreeOfParallelism = maxDegreeOfParallelism
            }
                      );

            translationDistributerBlock
                = new ActionBlock <MessageContext <Translation> >(
                      TranslationDistributerHandler,
                      new ExecutionDataflowBlockOptions()
            {
                MaxDegreeOfParallelism = maxDegreeOfParallelism
            }
                      );

            createHttpRequestBlock.LinkTo(execHttpRequestBlock);
            execHttpRequestBlock.LinkTo(parseHttpResponseBlock);

            parseHttpResponseBlock.LinkTo(broadcastResponseBlock);

            broadcastResponseBlock.LinkTo(dumpResponseBlock);
            broadcastResponseBlock.LinkTo(deserializeResponseBlock);
            deserializeResponseBlock.LinkTo(translationDistributerBlock);
        }
        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);
        }
Example #5
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);
        }
Example #6
0
        public FeedSubscriberFlow(
            ILogger <FeedManager> logger,
            IOptions <FeedSubscriberOptions> options,
            IMessageDumper messageDumper,
            TranslationSubscriptionCollection subscriptions,

            HttpClientManager httpClientManager,
            IHttpRequestMessageFactory httpRequestMessageFactory,
            IProviderAdapter providerAdapter,
            IFeedManager feedManager
            )
        {
            this.logger                    = logger;
            this.options                   = options.Value;
            this.messageDumper             = messageDumper;
            this.subscriptions             = subscriptions;
            this.httpClientManager         = httpClientManager;
            this.httpRequestMessageFactory = httpRequestMessageFactory;
            this.providerAdapter           = providerAdapter;
            this.feedManager               = feedManager;

            // Flow 1
            translationCreateRequestBlock
                = new TransformManyBlock <MessageContext <TranslationRequest, TranslationSubscription>,
                                          MessageContext <HttpRequestMessage, TranslationSubscription> >(
                      TranslationCreateRequestHandler,
                      new ExecutionDataflowBlockOptions()
            {
                MaxDegreeOfParallelism = maxDegreeOfParallelism
            }
                      );

            // Flow 2
            translationExecRequestBlock
                = new TransformManyBlock <MessageContext <HttpRequestMessage, TranslationSubscription>,
                                          MessageContext <HttpResponseMessage, TranslationSubscription> >(
                      TranslationExecRequestHandler,
                      new ExecutionDataflowBlockOptions()
            {
                MaxDegreeOfParallelism = maxDegreeOfParallelism
            }
                      );

            // Flow 3
            translationCheckHashBlock
                = new TransformManyBlock <MessageContext <HttpResponseMessage, TranslationSubscription>,
                                          MessageContext <string, TranslationSubscription> >(
                      TranslationCheckHashHandler,
                      new ExecutionDataflowBlockOptions()
            {
                MaxDegreeOfParallelism = maxDegreeOfParallelism
            }
                      );

            // Flow 4
            translationParseResponseBlock
                = new TransformManyBlock <MessageContext <string, TranslationSubscription>,
                                          MessageContext <Translation, TranslationSubscription> >(
                      TranslationMessageParseHandler,
                      new ExecutionDataflowBlockOptions()
            {
                MaxDegreeOfParallelism = maxDegreeOfParallelism
            }
                      );

            // Flow 5
            translationDumpBlock
                = new TransformManyBlock <MessageContext <Translation, TranslationSubscription>,
                                          MessageContext <Translation, TranslationSubscription> >(
                      TranslationDumpHandler,
                      new ExecutionDataflowBlockOptions()
            {
                MaxDegreeOfParallelism = maxDegreeOfParallelism
            }
                      );

            // Flow 6
            translationRouterBlock
                = new BroadcastBlock <MessageContext <Translation> >(t => t);

            // Flow 7-1
            translationToAdapterBlock
                = new ActionBlock <MessageContext <Translation> >(
                      TranslationToAdapterHandler,
                      new ExecutionDataflowBlockOptions()
            {
                MaxDegreeOfParallelism = maxDegreeOfParallelism
            }
                      );

            // Flow 7-2
            translationSubscriptionBlock
                = new ActionBlock <MessageContext <Translation> >(
                      TranslationSubscriptionHandler,
                      new ExecutionDataflowBlockOptions()
            {
                MaxDegreeOfParallelism = maxDegreeOfParallelism
            }
                      );

            translationCreateRequestBlock.LinkTo(translationExecRequestBlock);
            translationExecRequestBlock.LinkTo(translationCheckHashBlock);
            translationCheckHashBlock.LinkTo(translationParseResponseBlock);
            translationParseResponseBlock.LinkTo(translationDumpBlock);
            translationDumpBlock.LinkTo(translationRouterBlock);
            translationRouterBlock.LinkTo(translationToAdapterBlock);
            translationRouterBlock.LinkTo(translationSubscriptionBlock);
        }