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 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); }