public PacketHandlingFlow(int iteration, ICoreVerifiersBulkFactory coreVerifiersBulkFactory, IPacketVerifiersRepository packetTypeHandlersFactory, IBlockParsersRepositoriesRepository blockParsersFactoriesRepository, IBlocksHandlersRegistry blocksProcessorFactory, IPerformanceCountersRepository performanceCountersRepository, ILoggerService loggerService) { _coreVerifiers = coreVerifiersBulkFactory.Create(); _log = loggerService.GetLogger($"{nameof(PacketHandlingFlow)}#{iteration}"); _blockParsersFactoriesRepository = blockParsersFactoriesRepository; _chainTypeValidationHandlersFactory = packetTypeHandlersFactory; _blocksHandlersRegistry = blocksProcessorFactory; _decodeBlock = new TransformBlock <byte[], byte[]>((Func <byte[], byte[]>)DecodeMessage, new ExecutionDataflowBlockOptions() { MaxDegreeOfParallelism = 1, BoundedCapacity = 1000000 }); _parseBlock = new TransformBlock <byte[], BlockBase>((Func <byte[], BlockBase>)ParseMessagePacket, new ExecutionDataflowBlockOptions() { MaxDegreeOfParallelism = 1, BoundedCapacity = 1000000 }); _processBlock = new ActionBlock <BlockBase>((Action <BlockBase>)DispatchBlock, new ExecutionDataflowBlockOptions() { MaxDegreeOfParallelism = 1, BoundedCapacity = 1000000 }); _endToEndCountersService = performanceCountersRepository.GetInstance <EndToEndCountersService>(); _decodeBlock.LinkTo(_parseBlock); _parseBlock.LinkTo(_processBlock); }
public PacketsHandler(IPacketVerifiersRepository packetTypeHandlersFactory, IBlockParsersRepositoriesRepository blockParsersFactoriesRepository, IBlocksHandlersRegistry blocksProcessorFactory, ICoreVerifiersBulkFactory coreVerifiersBulkFactory, IPerformanceCountersRepository performanceCountersRepository, ILoggerService loggerService) { _log = loggerService.GetLogger(GetType().Name); _messagePackets = new BlockingCollection <byte[]>(); _endToEndCountersService = performanceCountersRepository.GetInstance <EndToEndCountersService>(); _maxDegreeOfParallelism = 4; _handlingFlows = new PacketHandlingFlow[_maxDegreeOfParallelism]; for (int i = 0; i < _maxDegreeOfParallelism; i++) { _handlingFlows[i] = new PacketHandlingFlow(i, coreVerifiersBulkFactory, packetTypeHandlersFactory, blockParsersFactoriesRepository, blocksProcessorFactory, performanceCountersRepository, loggerService); } }