public Erc20ContractIndexingActorDispatcher( IErc20ContractIndexingService indexingService, ILog logger, ulong startFrom, IErc20ContractIndexingActorFactory erc20ContractIndexingActorFactory) { _indexingService = indexingService; _logger = logger; _startFrom = startFrom; _erc20ContractIndexingActor = erc20ContractIndexingActorFactory.Build(Context, "erc20ContractIndexingActor"); ReceiveAsync <Messages.Common.DoIterationMessage>(async(message) => { var model = await _indexingService.GetNextContractToIndexAsync(); if (model != null) { await _erc20ContractIndexingActor.Ask( Messages.Erc20ContractIndexingActor.CreateErc20ContractDeployedMessage(model), TimeSpan.FromSeconds(30)); Self.Tell(Messages.Common.CreateDoIterationMessage()); } else { Context.System.Scheduler.ScheduleTellOnce(TimeSpan.FromSeconds(10), Self, Messages.Common.CreateDoIterationMessage(), Self); } }); }
public Erc20ContractIndexingJob( IErc20ContractIndexingService indexingService, ILog logger) { _indexingService = indexingService; _logger = logger; }
public Erc20ContractIndexingActor( IErc20ContractIndexingService indexingService, ILog logger) { _indexingService = indexingService; _logger = logger; ReceiveAsync <Messages.Erc20ContractIndexingActor.Erc20ContractDeployedMessage>(async(message) => { var contractModel = message.DeployedContractModel; await RetryPolicy.ExecuteAsync(async() => { await _indexingService.IndexContractAsync(contractModel); }, 5, 100); await _logger.WriteInfoAsync ( nameof(Erc20ContractIndexingJob), nameof(ReceiveAsync), "Contract indexed", $"Indexed contract as address {contractModel.Address}.", DateTime.UtcNow ); }); }