コード例 #1
0
        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);
                }
            });
        }
コード例 #2
0
        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}"));
            }
        }