public void _balanceUpdated(BalanceWalletDTO balance, string address, string seed) { var vlt = _walletList.FirstOrDefault(w => w.Address == address); if (vlt != null) { vlt.Amount = balance.Amount; vlt.AmountBTC = CurrencyHelper.BTCHelperDecimal(balance.PriceBTC * balance.Amount); vlt.AmountEUR = CurrencyHelper.FiatHelperDecimal(balance.PriceEUR * balance.Amount); vlt.AmountUSD = CurrencyHelper.FiatHelperDecimal(balance.PriceUSD * balance.Amount); if (!string.IsNullOrEmpty(balance.MasternodeStatus)) { vlt.IsMasternode = true; } vlt.MasternodeStatus = balance.MasternodeStatus; vlt.LastUpdated = balance.LastUpdated; vlt.Degraded = balance.Degraded; vlt.Error = balance.Error; vlt.PriceBTC = balance.PriceBTC; vlt.Trend1 = balance.Trend1; vlt.Trend7 = balance.Trend7; vlt.Trend14 = balance.Trend14; NotifyOfPropertyChange(() => TotalBTC); NotifyOfPropertyChange(() => TotalEUR); NotifyOfPropertyChange(() => TotalUSD); } }
/// <summary> /// Update worker /// </summary> /// <param name="data"></param> private void _worker(object data) { while (true) { List <WalletDTO> processWallets; lock (locker) { processWallets = new List <WalletDTO>(_wallets); } foreach (var wallet in processWallets) { try { var json = _httpClient.GetStringAsync(string.Format("http://monitorapi.ccore.online/api/getbalance?seed={0}&address={1}", wallet.Seed, wallet.Address)).Result; var balance = JsonConvert.DeserializeObject <BalanceWalletDTO>(json); balance.LastUpdated = DateTimeOffset.UtcNow.ToUnixTimeSeconds(); BalanceUpdated?.Invoke(balance, wallet.Address, wallet.Seed); } catch { var balance = new BalanceWalletDTO() { LastUpdated = DateTimeOffset.UtcNow.ToUnixTimeSeconds(), Error = true }; BalanceUpdated?.Invoke(balance, wallet.Address, wallet.Seed); //log exception } } lock (locker) { _sleep = true; while (_sleep) { Monitor.Wait(locker); _sleep = false; } } } }