diff --git a/qtc-net-server/Hubs/ChatHub.cs b/qtc-net-server/Hubs/ChatHub.cs index 0a47bd3..052efbf 100644 --- a/qtc-net-server/Hubs/ChatHub.cs +++ b/qtc-net-server/Hubs/ChatHub.cs @@ -8,16 +8,18 @@ namespace qtc_api.Hubs private IUserService _userService; private IRoomService _roomService; private ILogger _logger; + private DataContext _dataContext; private static readonly Dictionary> GroupUsers = []; private static readonly Dictionary> ConnectedUsers = []; private static readonly List OnlineUsers = []; - public ChatHub(IUserService userService, IRoomService roomService, ILogger logger) + public ChatHub(IUserService userService, IRoomService roomService, ILogger logger, DataContext dataContext) { _userService = userService; _roomService = roomService; _logger = logger; + _dataContext = dataContext; } public async override Task OnConnectedAsync() @@ -78,13 +80,20 @@ namespace qtc_api.Hubs ConnectedUsers.Remove(userId); if (OnlineUsers.Any(e => e.Id == userId)) { + // set user offline if there aren't any more connections var onlineUser = OnlineUsers.FirstOrDefault(e => e.Id == userId); if(onlineUser != null) { Log("User Has No More Connections. Setting Offline..."); OnlineUsers.Remove(onlineUser); - if (user.Data.Status >= 1) await UpdateStatusAsync(onlineUser, 0); + if (user.Data.Status >= 1) + await UpdateStatusAsync(onlineUser, 0); } + + // also remove the user from any rooms + var room = await _roomService.GetRoom(user.Data.CurrentRoomId); + if (room.Data != null) + await LeaveRoomAsync(user.Data, room.Data); } } } @@ -123,6 +132,9 @@ namespace qtc_api.Hubs await Clients.Group(room.Id).SendAsync("RoomUserList", GroupUsers[room.Id]); Log($"User {user.Username} Has Joined {room.Name}"); + + user.CurrentRoomId = room.Id; + await _dataContext.SaveChangesAsync(); } [HubMethodName("JoinRoomGuest")] @@ -151,6 +163,9 @@ namespace qtc_api.Hubs await Clients.Group(room.Id).SendAsync("RoomUserList", GroupUsers[room.Id]); Log($"User {user.Username} Has Left {room.Name}"); + + user.CurrentRoomId = string.Empty; + await _dataContext.SaveChangesAsync(); } [HubMethodName("SendMessage")] diff --git a/qtc-net-server/Models/User.cs b/qtc-net-server/Models/User.cs index acd63e9..b1035f4 100644 --- a/qtc-net-server/Models/User.cs +++ b/qtc-net-server/Models/User.cs @@ -17,6 +17,7 @@ public int StockAmount { get; set; } = 0; public DateTime LastCurrencySpin { get; set; } public int ActiveProfileCosmetic { get; set; } = 0; + public string CurrentRoomId { get; set; } = string.Empty; public virtual IEnumerable? RefreshTokens { get; } public virtual IEnumerable? ContactsMade { get; }