Esempio n. 1
0
        private async Task StartLoop(CancellationToken cancellation, string cryptoCode)
        {
            Logs.PayServer.LogInformation($"Starting listening Zcash-like daemons ({cryptoCode})");
            try
            {
                while (!cancellation.IsCancellationRequested)
                {
                    try
                    {
                        await _ZcashRpcProvider.UpdateSummary(cryptoCode);

                        if (_ZcashRpcProvider.IsAvailable(cryptoCode))
                        {
                            await Task.Delay(TimeSpan.FromMinutes(1), cancellation);
                        }
                        else
                        {
                            await Task.Delay(TimeSpan.FromSeconds(10), cancellation);
                        }
                    }
                    catch (Exception ex) when(!cancellation.IsCancellationRequested)
                    {
                        Logs.PayServer.LogError(ex, $"Unhandled exception in Summary updater ({cryptoCode})");
                        await Task.Delay(TimeSpan.FromSeconds(10), cancellation);
                    }
                }
            }
            catch when(cancellation.IsCancellationRequested)
            {
            }
        }
Esempio n. 2
0
        public Task StartAsync(CancellationToken cancellationToken)
        {
            if (!_ZcashLikeConfiguration.ZcashLikeConfigurationItems.Any())
            {
                return(Task.CompletedTask);
            }
            _Cts = CancellationTokenSource.CreateLinkedTokenSource(cancellationToken);

            leases.Add(_eventAggregator.Subscribe <ZcashEvent>(OnZcashEvent));
            leases.Add(_eventAggregator.Subscribe <ZcashRPCProvider.ZcashDaemonStateChange>(e =>
            {
                if (_ZcashRpcProvider.IsAvailable(e.CryptoCode))
                {
                    _logger.LogInformation($"{e.CryptoCode} just became available");
                    _ = UpdateAnyPendingZcashLikePayment(e.CryptoCode);
                }
                else
                {
                    _logger.LogInformation($"{e.CryptoCode} just became unavailable");
                }
            }));
            _ = WorkThroughQueue(_Cts.Token);
            return(Task.CompletedTask);
        }