From 834b7071ee95a54a2053aa74241739945a3f6e6a Mon Sep 17 00:00:00 2001
From: YDL <1368269699@QQ.COM>
Date: Thu, 22 Sep 2022 15:43:10 +0800
Subject: [PATCH] =?UTF-8?q?=E5=8A=A0=E5=85=A5=E6=88=BF=E9=97=B4=E7=A6=BB?=
=?UTF-8?q?=E5=BC=80=E6=88=BF=E9=97=B4=E6=8E=A5=E5=8F=A3=E5=AE=9E=E7=8E=B0?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
AX.WebDrillServer/Hubs/FireDeductionHub.cs | 110 +++++++++++-------
.../FireDeductionHub/FireDeductionRoom.cs | 13 ---
.../FireDeductionRoomEnums.cs | 37 ++++++
.../FireDeductionHub/RoomEnterData.cs | 9 ++
.../FireDeductionHub/RoomLeaveData.cs | 8 ++
.../Services/FireDeductionHub/RoomManager.cs | 20 ++--
.../FireDeductionHub/RoommateChangeData.cs | 9 ++
7 files changed, 140 insertions(+), 66 deletions(-)
create mode 100644 AX.WebDrillServer/Services/FireDeductionHub/FireDeductionRoomEnums.cs
create mode 100644 AX.WebDrillServer/Services/FireDeductionHub/RoomEnterData.cs
create mode 100644 AX.WebDrillServer/Services/FireDeductionHub/RoomLeaveData.cs
create mode 100644 AX.WebDrillServer/Services/FireDeductionHub/RoommateChangeData.cs
diff --git a/AX.WebDrillServer/Hubs/FireDeductionHub.cs b/AX.WebDrillServer/Hubs/FireDeductionHub.cs
index 3c18c64..f22f6b4 100644
--- a/AX.WebDrillServer/Hubs/FireDeductionHub.cs
+++ b/AX.WebDrillServer/Hubs/FireDeductionHub.cs
@@ -33,7 +33,11 @@ namespace AX.WebDrillServer.Hubs
_logger = logger;
this.roomManager = roomManager;
}
-
+ ///
+ /// 获取当前房间列表
+ ///
+ ///
+ ///
public List CallServer_GetRoomList(string userId)
{
return roomManager.GetAllRooms();
@@ -57,7 +61,7 @@ namespace AX.WebDrillServer.Hubs
{
try
{
- RoomCreateResultData resultData = new RoomCreateResultData();
+ RoomCreateResultData resultData = new RoomCreateResultData()!;
var user = roomManager.GetUser(createInfo.UserId);
if (user == null)//查询不到创建房间的用户
{
@@ -74,12 +78,14 @@ namespace AX.WebDrillServer.Hubs
resultData.RoomCreateResult = RoomCreateResult.RoomReName;
return resultData;
}
- FireDeductionRoom room = new FireDeductionRoom();
- room.Owner = createInfo.UserId;
- room.OwnerName = user.UserName;
- room.RoomId = Guid.NewGuid().ToString();
- room.RoomName = createInfo.Name = createInfo.Name;
- room.Password = createInfo.Password;
+ FireDeductionRoom room = new()
+ {
+ Owner = createInfo.UserId,
+ OwnerName = user.UserName,
+ RoomId = Guid.NewGuid().ToString(),
+ RoomName = createInfo.Name,
+ Password = createInfo.Password
+ };
roomManager.AddRoom(room);
user.RoomId = room.RoomId;
@@ -97,29 +103,40 @@ namespace AX.WebDrillServer.Hubs
throw new Exception(ex.Message);
}
}
- public bool CallServer_EnterRoom(string roomId, FireDeductionUser user, string? password = null)
+
+ public async Task CallServer_EnterRoom(RoomEnterData enterInfo)
{
- bool result = false;
try
{
- var room = roomManager.GetRoom(roomId);
- if (room != null && room.Password == password)
+ var room = roomManager.GetRoom(enterInfo.RoomId);
+ if (room == null)//根据id查不到房间
+ {
+ return RoomEnterResult.RoomError;
+ }
+ var user = roomManager.GetUser(enterInfo.UserId);
+ if (user == null)//根据id查不到用户
{
- if (!room.Users.Contains(user))
+ return RoomEnterResult.NoUserExist;
+ }
+ var roomHas = roomManager.GetRoom(enterInfo.RoomId, enterInfo.Password);
+ if (roomHas != null)//获取到要进入的房间跟用户信息
+ {
+ roomManager.AddUser(user);
+ user.RoomId = roomHas.RoomId;
+ RoommateChangeData data = new()
{
+ ChangeType = RoommateChangeType.Add,
+ FireDeductionUser = user,
+ FireDeductionUsers = roomHas.Users
+ };
+ //通知web端刷新房间用户列表
+ await Clients.Group(roomHas.RoomId).SendAsync("callWeb_changeRoomate", data);
- result = true;
- room.Users.Add(user);
- user.RoomId = room.RoomId;
- }
- else
- {
- throw new NotImplementedException("房间中已经存在该用户!");
- }
+ return RoomEnterResult.Success;
}
else
{
- throw new NotImplementedException("房间信息有误!");
+ return RoomEnterResult.RoomError;
}
}
catch (Exception)
@@ -127,38 +144,41 @@ namespace AX.WebDrillServer.Hubs
throw;
}
- return result;
+
}
- public async Task LeaveRoom(string roomId, string userId)
+ public async Task CallServer_LeaveRoom(RoomLeaveData leaveInfo)
{
- bool result = false;
- await Task.Run(() =>
+ try
{
- var room = roomManager.GetRoom(roomId);
- if (room != null)
+ var room = roomManager.GetRoom(leaveInfo.RoomId);
+ if (room == null)//根据id查不到房间
{
- var user = room.Users.FirstOrDefault(u => u.UserId == userId);
- if (user != null)
- {
- room.Users.Remove(user);
- if (room.Users.Count == 0)
- {
- //TODO:保持空房间xx分钟
- }
- }
- else
- {
- throw new NotImplementedException("用户信息有误!");
- }
+ return RoomEnterResult.RoomError;
}
- else
+ var user = roomManager.GetUser(leaveInfo.UserId);
+ if (user == null)//根据id查不到用户
{
- throw new NotImplementedException("房间信息有误!");
+ return RoomEnterResult.NoUserExist;
}
- });
- return result;
+ roomManager.RemoveUser(leaveInfo.UserId);
+ user.RoomId = "";
+ RoommateChangeData data = new()
+ {
+ ChangeType = RoommateChangeType.Remove,
+ FireDeductionUser = user,
+ FireDeductionUsers = room.Users
+ };
+ //通知web端刷新房间用户列表
+ await Clients.Group(room.RoomId).SendAsync("callWeb_changeRoomate", data);
+
+ return RoomEnterResult.Success;
+ }
+ catch (Exception)
+ {
+ throw;
+ }
}
public async Task RoomSendMessage(string RoomId, string Message)
{
diff --git a/AX.WebDrillServer/Services/FireDeductionHub/FireDeductionRoom.cs b/AX.WebDrillServer/Services/FireDeductionHub/FireDeductionRoom.cs
index 59292e9..bc13d21 100644
--- a/AX.WebDrillServer/Services/FireDeductionHub/FireDeductionRoom.cs
+++ b/AX.WebDrillServer/Services/FireDeductionHub/FireDeductionRoom.cs
@@ -2,19 +2,6 @@
namespace AX.WebDrillServer.Services.FireDeductionHub
{
- public enum RoomCreateResult
- {
- Success = 0,//成功
- RoomReName,//房间重名
- RoomNameEmpty,//房间名为空
- NoUserExist,//用户不存在
- }
- public enum RoomState
- {
- Ready = 0,//准备
- Playing,//进行中
- Over,//结束
- }
///
/// 沙盘推演房间
///
diff --git a/AX.WebDrillServer/Services/FireDeductionHub/FireDeductionRoomEnums.cs b/AX.WebDrillServer/Services/FireDeductionHub/FireDeductionRoomEnums.cs
new file mode 100644
index 0000000..ddf5a00
--- /dev/null
+++ b/AX.WebDrillServer/Services/FireDeductionHub/FireDeductionRoomEnums.cs
@@ -0,0 +1,37 @@
+namespace AX.WebDrillServer.Services.FireDeductionHub
+{
+ public enum RoomCreateResult
+ {
+ Success = 0,//成功
+ RoomReName,//房间重名
+ RoomNameEmpty,//房间名为空
+ NoUserExist,//用户不存在
+ }
+ public enum RoomState
+ {
+ Ready = 0,//准备
+ Playing,//进行中
+ Over,//结束
+ }
+ public enum RoomEnterResult
+ {
+ Success = 0,//成功
+ RoomError,//房间信息有误
+ NoUserExist,//用户信息有误
+ }
+ public enum RoomLeaveResult
+ {
+ Success = 0,//成功
+ RoomError,//房间信息有误
+ NoUserExist,//用户信息有误
+ }
+ public enum RoommateChangeType
+ {
+ Add = 0,//新增
+ Remove,//移除
+ }
+ public class FireDeductionRoomEnums
+ {
+
+ }
+}
diff --git a/AX.WebDrillServer/Services/FireDeductionHub/RoomEnterData.cs b/AX.WebDrillServer/Services/FireDeductionHub/RoomEnterData.cs
new file mode 100644
index 0000000..8a14130
--- /dev/null
+++ b/AX.WebDrillServer/Services/FireDeductionHub/RoomEnterData.cs
@@ -0,0 +1,9 @@
+namespace AX.WebDrillServer.Services.FireDeductionHub
+{
+ public class RoomEnterData
+ {
+ public string RoomId { get; set; } = null!;
+ public string UserId { get; set; } = null!;
+ public string? Password { get; set; }
+ }
+}
diff --git a/AX.WebDrillServer/Services/FireDeductionHub/RoomLeaveData.cs b/AX.WebDrillServer/Services/FireDeductionHub/RoomLeaveData.cs
new file mode 100644
index 0000000..4d7fc2b
--- /dev/null
+++ b/AX.WebDrillServer/Services/FireDeductionHub/RoomLeaveData.cs
@@ -0,0 +1,8 @@
+namespace AX.WebDrillServer.Services.FireDeductionHub
+{
+ public class RoomLeaveData
+ {
+ public string RoomId { get; set; } = null!;
+ public string UserId { get; set; } = null!;
+ }
+}
diff --git a/AX.WebDrillServer/Services/FireDeductionHub/RoomManager.cs b/AX.WebDrillServer/Services/FireDeductionHub/RoomManager.cs
index bf4abf8..e45aef0 100644
--- a/AX.WebDrillServer/Services/FireDeductionHub/RoomManager.cs
+++ b/AX.WebDrillServer/Services/FireDeductionHub/RoomManager.cs
@@ -2,16 +2,13 @@
{
public class RoomManager
{
- private List fireDeductionRooms = new List();
- private List fireDeductionUsers = new List();
+ private readonly List fireDeductionRooms = new();
+ private readonly List fireDeductionUsers = new();
- public RoomShowInfo RoomToInfo(FireDeductionRoom source, RoomShowInfo info = null!)
+ public RoomShowInfo RoomToInfo(FireDeductionRoom source, RoomShowInfo? info = null)
{
- if (info == null)
- {
- info = new RoomShowInfo();
- }
+ info ??= new();
info.RoomId = source.RoomId;
info.RoomName = source.RoomName;
info.Owner = source.Owner;
@@ -34,7 +31,7 @@
{
lock (this)
{
- List infos = new List();
+ List infos = new();
foreach (var item in fireDeductionRooms)
{
infos.Add(RoomToInfo(item));
@@ -49,6 +46,13 @@
return fireDeductionUsers;
}
}
+ public FireDeductionRoom? GetRoom(string roomId, string? password)
+ {
+ lock (this)
+ {
+ return fireDeductionRooms.Where(r => r.RoomId == roomId && r.Password == password).SingleOrDefault();
+ }
+ }
public FireDeductionRoom? GetRoom(string roomId)
{
lock (this)
diff --git a/AX.WebDrillServer/Services/FireDeductionHub/RoommateChangeData.cs b/AX.WebDrillServer/Services/FireDeductionHub/RoommateChangeData.cs
new file mode 100644
index 0000000..9629c4f
--- /dev/null
+++ b/AX.WebDrillServer/Services/FireDeductionHub/RoommateChangeData.cs
@@ -0,0 +1,9 @@
+namespace AX.WebDrillServer.Services.FireDeductionHub
+{
+ public class RoommateChangeData
+ {
+ public RoommateChangeType ChangeType { get; set; }
+ public FireDeductionUser FireDeductionUser { get; set; } = null!;
+ public List FireDeductionUsers { get; set; } = new List();
+ }
+}