我正在做一个聊天项目。每当用户每次要获取数据库并获取所有用户时都希望登录并在线时,当然,我会通过connectionId将该用户登录。实际上,该用户在视图中具有connectionId显示。作为一个在线用户和其他用户都没有connectionId,它将以脱机用户的身份显示在视图中。但是我的问题是,当一个用户想要在线时,我向该用户添加了一个connectionId,如果另一个用户想要在线。先前的用户处于离线状态。我的想法是将每个在线用户都保留在数据库中,如果某个用户想退出聊天,则将该用户作为脱机用户在数据库中签名,反之亦然。您对此有何看法?在数据库中保留用户状态是错误的还是糟糕的想法?
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();
}