public BlockTransactionsListener( BlockHeaderReadEvent blockHeader, IMessagePublisher messagePublisher, IRawObjectWriteOnlyRepository rawObjectsRepository, int transactionsBatchSize, int maxTransactionsSavingParallelism, BlockchainTransferModel transferModel) { if (transactionsBatchSize <= 0) { throw new ArgumentOutOfRangeException(nameof(transactionsBatchSize), transactionsBatchSize, "Should be positive number"); } if (maxTransactionsSavingParallelism <= 0) { throw new ArgumentOutOfRangeException(nameof(transactionsBatchSize), transactionsBatchSize, "Should be positive number"); } _blockHeader = blockHeader; _messagePublisher = messagePublisher; _rawObjectsRepository = rawObjectsRepository; _transactionsBatchSize = transactionsBatchSize; _tailTransactionsBatchExtensionSize = transactionsBatchSize * 20 / 100; // 20% _transferModel = transferModel; _transferAmountExecutedTransactions = new List <TransferAmountExecutedTransaction>(_transactionsBatchSize); _transferCoinsExecutedTransactions = new List <TransferCoinsExecutedTransaction>(_transactionsBatchSize); _failedTransactions = new List <FailedTransaction>(_transactionsBatchSize); _rawTransactionsPersistenceTasks = new List <Task>(blockHeader.BlockTransactionsCount); _remainedTransactionsCount = blockHeader.BlockTransactionsCount; _rawTransactionsPersistenceParallelismGuard = new SemaphoreSlim(maxTransactionsSavingParallelism); }
public IBlockTransactionsListener StartBlockTransactionsHandling(BlockHeaderReadEvent evt) { if (_blockHeader != null) { throw new InvalidOperationException($"Block header already was handled: {_blockHeader}"); } if (_isBlockNotFound) { throw new InvalidOperationException("Block already handled as not found"); } _blockHeader = evt ?? throw new ArgumentNullException(nameof(evt)); _transactionsListener = new BlockTransactionsListener ( _blockHeader, _messagePublisher, _rawObjectsRepository, _transactionsBatchSize, _maxTransactionsSavingParallelism, _transferModel ); return(_transactionsListener); }
public Task <MessageHandlingResult> HandleAsync(string integrationName, BlockHeaderReadEvent evt, MessageHeaders headers, IMessagePublisher replyPublisher) { return(Task.FromResult(MessageHandlingResult.Success())); }