private void DoWork(object state) { Task.Run(async() => { try { using (var scope = _scopeFactory.CreateScope()) { if (_lastCheckedBlockNumber == 0) { _lastCheckedBlockNumber = (int)(await _explorer.GetLastAvailableBlockNumber()).Value; } if ((int)(await _explorer.GetLastAvailableBlockNumber()).Value > _lastCheckedBlockNumber) { var dbContext = scope.ServiceProvider.GetRequiredService <WalletDbContext>(); Transaction[] transactions = {}; if (_userInfo.onlineUsers.Count > 0) { transactions = await GetLastBlockTransactions(); } foreach (var user in _userInfo.onlineUsers) { var data = await dbContext.UserWatchlist .Where(w => w.UserEmail.Equals(user.Value.UserName, StringComparison.CurrentCultureIgnoreCase)).Include(w => w.NotificationOptions) .ToListAsync(); var ids = GetIdNotificatedAddresses(transactions.ToList(), data); var result = WatchlistHelper.OrganizeData(data); result.ForEach(e => { if (ids.Any(i => i == e.Account.Id)) { e.Account.IsNotificated = true; } if (ids.Any(i => i == e.Contract.Id)) { e.Contract.IsNotificated = true; } }); await _hubContext.Clients.Clients(user.Value.ConnectionId) .SendAsync("Message", result); } _lastCheckedBlockNumber++; } } } catch (Exception e) { //await _hubContext.Clients.All.SendAsync("Message", e.Message); } }); }
public async Task <IActionResult> GetUserWatchlist(string userEmail) { try { var data = await _dbContext.UserWatchlist .Where(w => w.UserEmail.Equals(userEmail, StringComparison.CurrentCultureIgnoreCase)).ToListAsync(); var result = WatchlistHelper.OrganizeData(data); return(new ObjectResult(result)); } catch (Exception e) { return(StatusCode(500, $"En error occurred :{e.Message}")); } }