public FeedSubscriber(
     ILogger <FeedSubscriber> logger,
     FeedSubscriberFlow subscriptionFlow,
     TranslationSubscriptionCollection subscriptions,
     IFeedManager feedManager,
     IProviderAdapter providerAdapter
     )
 {
     this.logger = logger;
     this.feedSubscriptionFlow = subscriptionFlow;
     this.subscriptions        = subscriptions;
     this.feedManager          = feedManager;
     this.providerAdapter      = providerAdapter;
 }
        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 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);
        }