Я работаю над проектом чата. Когда пользователь хочет войти в систему и быть в сети каждый раз, когда я выбираю базу данных и получаю всех пользователей, и, конечно, я подписываю этого пользователя в режиме онлайн по connectionId. на самом деле, у этого пользователя есть представление connectionId в виде. Поскольку онлайн-пользователь и другие пользователи не имеют, ConnectionId будет отображаться как автономный пользователь. Но моя проблема в том, что когда пользователь хочет быть в сети, я добавляю для него connectionId, и если другой пользователь хочет быть в сети. Предыдущий пользователь не в сети. Моя идея - хранить каждого онлайн-пользователя в базе данных, и если пользователь хочет выйти из чата, я подписываю этого пользователя в базе данных как автономный пользователь и наоборот. Что ты об этом думаешь? Это неправильно или паршивая идея сохранить статус пользователя в базе данных?
![enter image description here](https://i.stack.imgur.com/9a8LB.png)
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();
}