Пример #1
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
                );
            });
        }
Пример #2
0
        public Task RunAsync(CancellationToken cancellationToken)
        {
            return(Task.Factory.StartNew(async() =>
            {
                try
                {
                    while (!cancellationToken.IsCancellationRequested)
                    {
                        var contract = await _indexingService.GetNextContractToIndexAsync();

                        await RetryPolicy.ExecuteAsync(async() =>
                        {
                            await _indexingService.IndexContractAsync(contract);
                        }, 5, 100);

                        await _logger.WriteInfoAsync
                        (
                            nameof(Erc20ContractIndexingJob),
                            nameof(RunAsync),
                            "Contract indexed",
                            $"Indexed contract as address {contract.Address}.",
                            DateTime.UtcNow
                        );
                    }
                }
                catch (Exception e)
                {
                    await _logger.WriteErrorAsync
                    (
                        nameof(Erc20ContractIndexingJob),
                        nameof(RunAsync),
                        "Indexing failed",
                        e,
                        DateTime.UtcNow
                    );

                    throw;
                }
            }, cancellationToken).Unwrap());
        }