Пример #1
0
        public BlockchainBatchProcessorService(
            IBlockchainProcessor processor,
            IBlockProgressService progressService,
            uint?maxNumberOfBlocksPerBatch = null)
        {
            _processor       = processor;
            _progressService = progressService;

            _maxNumberOfBlocksPerBatch = maxNumberOfBlocksPerBatch ?? DefaultMaxNumberOfBlocksPerBatch;
        }
Пример #2
0
        public LogsProcessor(
            IBlockchainProcessor processor,
            IBlockProgressService progressService,
            uint?maxNumberOfBlocksPerBatch = null,
            Action <LogBatchProcessedArgs> rangesProcessedCallback = null,
            Action <Exception> fatalErrorCallback = null,
            ILog log = null)
        {
            _processor       = processor;
            _progressService = progressService;
            _log             = new LogsProcessorInstrumentation(log);

            MaxNumberOfBlocksPerBatch = maxNumberOfBlocksPerBatch ?? DefaultMaxNumberOfBlocksPerBatch;
            BatchProcessedCallback    = rangesProcessedCallback;
            FatalErrorCallback        = fatalErrorCallback;
        }
        protected virtual IBlockProgressService CreateProgressService(BigInteger from, BigInteger?to)
        {
            if (BlockProgressServiceCallBack != null)
            {
                return(BlockProgressServiceCallBack.Invoke(from, to));
            }

            var progressRepository =
                new JsonBlockProgressRepository(PathToJsonProgressFile());

            IBlockProgressService progressService = null;

            if (to == null)
            {
                progressService = new BlockProgressService(Web3.Eth.Blocks, from, progressRepository, MinimumBlockConfirmations);
            }
            else
            {
                progressService = new StaticBlockRangeProgressService(from, to.Value, progressRepository);
            }

            return(progressService);
        }
Пример #4
0
        private IBlockProgressService CreateProgressService(ulong from, ulong?to)
        {
            if (_blockProgressServiceCallBack != null)
            {
                return(_blockProgressServiceCallBack.Invoke(from, to));
            }

            var progressRepository =
                new JsonBlockProgressRepository(PathToJsonProgressFile());

            IBlockProgressService progressService = null;

            if (to == null)
            {
                progressService = new BlockProgressService(BlockchainProxyService, from, progressRepository, MinimumBlockConfirmations);
            }
            else
            {
                progressService = new StaticBlockRangeProgressService(from, to.Value, progressRepository);
            }

            return(progressService);
        }
        public virtual async Task <BigInteger> ProcessAsync(BigInteger from, BigInteger?to = null, CancellationTokenSource ctx = null, Action <LogBatchProcessedArgs> logBatchProcessedCallback = null)
        {
            if (!LogProcessors.Any())
            {
                throw new InvalidOperationException("No events to capture - use AddEventAsync to add listeners for indexable events");
            }

            var logProcessor = new BlockRangeLogsProcessor(
                Web3.Eth.Filters.GetLogs,
                LogProcessors,
                Filters);

            IBlockProgressService progressService = CreateProgressService(from, to);

            var batchProcessorService = new LogsProcessor(
                logProcessor, progressService, maxNumberOfBlocksPerBatch: MaxBlocksPerBatch);

            if (to != null)
            {
                return(await ProcessRange(ctx, logBatchProcessedCallback, batchProcessorService));
            }

            return(await batchProcessorService.ProcessContinuallyAsync(ctx?.Token ?? new CancellationToken(), logBatchProcessedCallback));
        }
Пример #6
0
        public virtual async Task <ulong> ProcessAsync(ulong from, ulong?to = null, CancellationTokenSource ctx = null, Action <uint, BlockRange> rangeProcessedCallback = null)
        {
            if (!LogProcessors.Any())
            {
                throw new InvalidOperationException("No events to capture - use AddEventAsync to add listeners for indexable events");
            }

            var logProcessor = new BlockchainLogProcessor(
                BlockchainProxyService,
                LogProcessors,
                Filters);

            IBlockProgressService progressService = CreateProgressService(from, to);

            var batchProcessorService = new BlockchainBatchProcessorService(
                logProcessor, progressService, maxNumberOfBlocksPerBatch: MaxBlocksPerBatch);

            if (to != null)
            {
                return(await ProcessRange(ctx, rangeProcessedCallback, batchProcessorService));
            }

            return(await batchProcessorService.ProcessContinuallyAsync(ctx?.Token ?? new CancellationToken(), rangeProcessedCallback));
        }