Ejemplo n.º 1
0
        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);
                }
            });
        }
Ejemplo n.º 2
0
 public Erc20ContractIndexingJob(
     IErc20ContractIndexingService indexingService,
     ILog logger)
 {
     _indexingService = indexingService;
     _logger          = logger;
 }
Ejemplo n.º 3
0
        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
                );
            });
        }