Пример #1
0
        public async Task <ZcashLikeSummary> UpdateSummary(string cryptoCode)
        {
            if (!DaemonRpcClients.TryGetValue(cryptoCode.ToUpperInvariant(), out var daemonRpcClient) ||
                !WalletRpcClients.TryGetValue(cryptoCode.ToUpperInvariant(), out var walletRpcClient))
            {
                return(null);
            }

            var summary = new ZcashLikeSummary();

            try
            {
                var daemonResult =
                    await daemonRpcClient.SendCommandAsync <JsonRpcClient.NoRequestModel, SyncInfoResponse>("sync_info",
                                                                                                            JsonRpcClient.NoRequestModel.Instance);

                summary.TargetHeight    = daemonResult.TargetHeight.GetValueOrDefault(0);
                summary.CurrentHeight   = daemonResult.Height;
                summary.TargetHeight    = summary.TargetHeight == 0 ? summary.CurrentHeight : summary.TargetHeight;
                summary.Synced          = daemonResult.Height >= summary.TargetHeight && summary.CurrentHeight > 0;
                summary.UpdatedAt       = DateTime.Now;
                summary.DaemonAvailable = true;
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
                summary.DaemonAvailable = false;
            }

            try
            {
                var walletResult =
                    await walletRpcClient.SendCommandAsync <JsonRpcClient.NoRequestModel, GetHeightResponse>(
                        "get_height", JsonRpcClient.NoRequestModel.Instance);

                summary.WalletHeight    = walletResult.Height;
                summary.WalletAvailable = true;
            }
            catch
            {
                summary.WalletAvailable = false;
            }

            var changed = !_summaries.ContainsKey(cryptoCode) || IsAvailable(cryptoCode) != IsAvailable(summary);

            _summaries.AddOrReplace(cryptoCode, summary);
            if (changed)
            {
                _eventAggregator.Publish(new ZcashDaemonStateChange()
                {
                    Summary = summary, CryptoCode = cryptoCode
                });
            }

            return(summary);
        }
Пример #2
0
 private bool IsAvailable(ZcashLikeSummary summary)
 {
     return(summary.Synced &&
            summary.WalletAvailable);
 }