Как сохранить статус пользователя где-нибудь, когда он / она подключен к сети с помощью asp.net core signalR? - PullRequest
0 голосов
/ 10 января 2019

Я работаю над проектом чата. Когда пользователь хочет войти в систему и быть в сети каждый раз, когда я выбираю базу данных и получаю всех пользователей, и, конечно, я подписываю этого пользователя в режиме онлайн по connectionId. на самом деле, у этого пользователя есть представление connectionId в виде. Поскольку онлайн-пользователь и другие пользователи не имеют, ConnectionId будет отображаться как автономный пользователь. Но моя проблема в том, что когда пользователь хочет быть в сети, я добавляю для него connectionId, и если другой пользователь хочет быть в сети. Предыдущий пользователь не в сети. Моя идея - хранить каждого онлайн-пользователя в базе данных, и если пользователь хочет выйти из чата, я подписываю этого пользователя в базе данных как автономный пользователь и наоборот. Что ты об этом думаешь? Это неправильно или паршивая идея сохранить статус пользователя в базе данных?

enter image description here

public override async Task OnConnectedAsync()
        {
            List<UsersViewModel> usersList = new List<UsersViewModel>();
            var claimIdenity = Context.User.Identity as ClaimsIdentity;
            var userId = claimIdenity.Claims.FirstOrDefault
                (x => x.Type == ClaimTypes.NameIdentifier).Value;


            var users = await _dbContext.Users.ToListAsync();
            foreach (var user in users)
            {
                usersList.Add(new UsersViewModel
                {
                    UserId = user.Id,
                    FirstName = user.FirstName,
                    LastName = user.LastName,
                    PersonPicture = "https://devilsworkshop.org/files/2013/01/enlarged-facebook-profile-picture.jpg",

                });
            }


            UsersViewModel loginedUser = usersList.Where(u => u.UserId == userId).FirstOrDefault();
            if (loginedUser != null)
            {
                loginedUser.ConnectionId = Context.ConnectionId;
            }
            string jsonUsers = JsonConvert.SerializeObject(usersList);
            await Clients.All.SendAsync("GetAllUsers", jsonUsers);
            await base.OnConnectedAsync();
        }
...