diff --git a/AX.WebDrillServer/Hubs/FireDeductionHub.cs b/AX.WebDrillServer/Hubs/FireDeductionHub.cs index f22f6b4..1ae7a67 100644 --- a/AX.WebDrillServer/Hubs/FireDeductionHub.cs +++ b/AX.WebDrillServer/Hubs/FireDeductionHub.cs @@ -103,7 +103,11 @@ namespace AX.WebDrillServer.Hubs throw new Exception(ex.Message); } } - + /// + /// 进入房间 + /// + /// + /// public async Task CallServer_EnterRoom(RoomEnterData enterInfo) { try @@ -146,7 +150,11 @@ namespace AX.WebDrillServer.Hubs } } - + /// + /// 离开房间 + /// + /// + /// public async Task CallServer_LeaveRoom(RoomLeaveData leaveInfo) { try @@ -192,32 +200,44 @@ namespace AX.WebDrillServer.Hubs //TODO:保存数据 } - + /// + /// 上线处理 + /// + /// public override async Task OnConnectedAsync() { try { var userId = Context.UserIdentifier; var userName = Context.GetNameOfCurrentUser(); - FireDeductionUser? user = roomManager.GetUser(userId!); + var user = roomManager.GetUser(userId!); if (user != null) { user.Online = true; if (user.ConnectionId != Context.ConnectionId) user.ConnectionId = Context.ConnectionId; - var room = roomManager.GetRoomByUserId(user.UserId); - if (room != null) + var room = roomManager.GetRoom(user.UserId); + if (room != null && !string.IsNullOrEmpty(user.RoomId)) { //断线重连 + RoommateChangeData data = new() + { + ChangeType = RoommateChangeType.OnLine, + FireDeductionUser = user, + }; + //通知web端刷新房间用户状态 + await Clients.Group(room.RoomId).SendAsync("callWeb_changeRoomate", data); } } else { - user = new FireDeductionUser(); - user.ConnectionId = Context.ConnectionId; - user.UserId = userId!; - user.UserName = userName!; + user = new FireDeductionUser + { + ConnectionId = Context.ConnectionId, + UserId = userId!, + UserName = userName! + }; roomManager.AddUser(user); } @@ -230,7 +250,11 @@ namespace AX.WebDrillServer.Hubs throw; } } - + /// + /// 离线处理 + /// + /// + /// public override async Task OnDisconnectedAsync(Exception? exception) { try @@ -242,13 +266,20 @@ namespace AX.WebDrillServer.Hubs if (userId != null) { var user = roomManager.GetUser(userId!); - if (user != null) + if (user != null && !string.IsNullOrEmpty(user.RoomId)) { user.Online = false; - var room = roomManager.GetRoomByUserId(user.UserId); + var room = roomManager.GetRoom(user.RoomId); if (room != null) { //断线 + RoommateChangeData data = new() + { + ChangeType = RoommateChangeType.OffLine, + FireDeductionUser = user, + }; + //通知web端刷新房间用户状态 + await Clients.Group(room.RoomId).SendAsync("callWeb_changeRoomate", data); } } } diff --git a/AX.WebDrillServer/Services/FireDeductionHub/FireDeductionRoomEnums.cs b/AX.WebDrillServer/Services/FireDeductionHub/FireDeductionRoomEnums.cs index ddf5a00..856f5f7 100644 --- a/AX.WebDrillServer/Services/FireDeductionHub/FireDeductionRoomEnums.cs +++ b/AX.WebDrillServer/Services/FireDeductionHub/FireDeductionRoomEnums.cs @@ -29,6 +29,8 @@ { Add = 0,//新增 Remove,//移除 + OnLine,//上线 + OffLine,//下线 } public class FireDeductionRoomEnums {