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);
        }
Beispiel #3
0
 public Task <MessageHandlingResult> HandleAsync(string integrationName, BlockHeaderReadEvent evt, MessageHeaders headers, IMessagePublisher replyPublisher)
 {
     return(Task.FromResult(MessageHandlingResult.Success()));
 }