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); }
private bool IsAvailable(ZcashLikeSummary summary) { return(summary.Synced && summary.WalletAvailable); }