public BlockchainBatchProcessorService( IBlockchainProcessor processor, IBlockProgressService progressService, uint?maxNumberOfBlocksPerBatch = null) { _processor = processor; _progressService = progressService; _maxNumberOfBlocksPerBatch = maxNumberOfBlocksPerBatch ?? DefaultMaxNumberOfBlocksPerBatch; }
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); }
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)); }
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)); }