diff --git a/AX.WebDrillServer/AX.WebDrillServer.sln b/AX.WebDrillServer/AX.WebDrillServer.sln index 4c14b7f..dc60608 100644 --- a/AX.WebDrillServer/AX.WebDrillServer.sln +++ b/AX.WebDrillServer/AX.WebDrillServer.sln @@ -5,8 +5,6 @@ VisualStudioVersion = 17.3.32825.248 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AX.WebDrillServer", "AX.WebDrillServer.csproj", "{B594C541-C030-412E-8B89-D38C24765D2D}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TestHub", "..\TestHub\TestHub.csproj", "{4B962EF6-1C2A-4283-B21D-46E6C57DD8D2}" -EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -20,12 +18,6 @@ Global {B594C541-C030-412E-8B89-D38C24765D2D}.Release|Any CPU.Build.0 = Release|Any CPU {B594C541-C030-412E-8B89-D38C24765D2D}.Test|Any CPU.ActiveCfg = Test|Any CPU {B594C541-C030-412E-8B89-D38C24765D2D}.Test|Any CPU.Build.0 = Test|Any CPU - {4B962EF6-1C2A-4283-B21D-46E6C57DD8D2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {4B962EF6-1C2A-4283-B21D-46E6C57DD8D2}.Debug|Any CPU.Build.0 = Debug|Any CPU - {4B962EF6-1C2A-4283-B21D-46E6C57DD8D2}.Release|Any CPU.ActiveCfg = Release|Any CPU - {4B962EF6-1C2A-4283-B21D-46E6C57DD8D2}.Release|Any CPU.Build.0 = Release|Any CPU - {4B962EF6-1C2A-4283-B21D-46E6C57DD8D2}.Test|Any CPU.ActiveCfg = Debug|Any CPU - {4B962EF6-1C2A-4283-B21D-46E6C57DD8D2}.Test|Any CPU.Build.0 = Debug|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/AX.WebDrillServer/Hubs/FireDeductionHub.cs b/AX.WebDrillServer/Hubs/FireDeductionHub.cs index 797c227..3c18c64 100644 --- a/AX.WebDrillServer/Hubs/FireDeductionHub.cs +++ b/AX.WebDrillServer/Hubs/FireDeductionHub.cs @@ -34,11 +34,15 @@ namespace AX.WebDrillServer.Hubs this.roomManager = roomManager; } - public List CallServer_GetRoomList(string userId) + public List CallServer_GetRoomList(string userId) { return roomManager.GetAllRooms(); } - + /// + /// 根据Socket连接Id获取当前用户 + /// + /// + /// public FireDeductionUser? CallServer_GetUser(string connectionId) { return roomManager.GetUserByConnectionId(connectionId); @@ -49,21 +53,32 @@ namespace AX.WebDrillServer.Hubs /// /// /// - public async Task CallServer_CreateRoom(RoomCreateDto createInfo) + public async Task CallServer_CreateRoom(RoomCreateData createInfo) { try { RoomCreateResultData resultData = new RoomCreateResultData(); var user = roomManager.GetUser(createInfo.UserId); - if (user == null)//如果查询不到创建房间的用户 + if (user == null)//查询不到创建房间的用户 + { + resultData.RoomCreateResult = RoomCreateResult.NoUserExist; + return resultData; + } + if (string.IsNullOrEmpty(createInfo.Name))//房间名称为空 + { + resultData.RoomCreateResult = RoomCreateResult.RoomNameEmpty; + return resultData; + } + if (roomManager.IsRoomNameSame(user.UserId, createInfo.Name))//同一用户创建了相同名称的房间 { - resultData.RoomCreateResult = RoomCreateResult.用户不存在; + 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 == null ? "未命名房间" : createInfo.Name; + room.RoomName = createInfo.Name = createInfo.Name; room.Password = createInfo.Password; roomManager.AddRoom(room); @@ -73,8 +88,8 @@ namespace AX.WebDrillServer.Hubs await Groups.AddToGroupAsync(user.ConnectionId, room.RoomId); await Clients.All.SendAsync("callWeb_refreshRoomList", roomManager.GetAllRooms()); - resultData.CreatedRoom = room; - resultData.RoomCreateResult = RoomCreateResult.成功; + resultData.CreatedRoom = roomManager.RoomToInfo(room); + resultData.RoomCreateResult = RoomCreateResult.Success; return resultData; } catch (Exception ex) diff --git a/AX.WebDrillServer/Program.cs b/AX.WebDrillServer/Program.cs index b4bfead..630caac 100644 --- a/AX.WebDrillServer/Program.cs +++ b/AX.WebDrillServer/Program.cs @@ -125,7 +125,7 @@ builder.Services options.PayloadSerializerOptions.PropertyNamingPolicy = JsonNamingPolicy.CamelCase; options.PayloadSerializerOptions.DictionaryKeyPolicy = JsonNamingPolicy.CamelCase; //全局配置signalr json 转枚举使用stringName还是intValue - //options.PayloadSerializerOptions.Converters.Add(new JsonStringEnumConverter(JsonNamingPolicy.CamelCase)); + options.PayloadSerializerOptions.Converters.Add(new JsonStringEnumConverter(JsonNamingPolicy.CamelCase)); }); //#region Custom Services @@ -147,7 +147,7 @@ builder.Services options.JsonSerializerOptions.PropertyNamingPolicy = JsonNamingPolicy.CamelCase; options.JsonSerializerOptions.DictionaryKeyPolicy = JsonNamingPolicy.CamelCase; //全局配置Controller json 转枚举使用stringName还是intValue - //options.JsonSerializerOptions.Converters.Add(new JsonStringEnumConverter(JsonNamingPolicy.CamelCase)); + options.JsonSerializerOptions.Converters.Add(new JsonStringEnumConverter(JsonNamingPolicy.CamelCase)); }); builder.Services.AddEndpointsApiExplorer(); diff --git a/AX.WebDrillServer/Services/FireDeductionHub/FireDeductionRoom.cs b/AX.WebDrillServer/Services/FireDeductionHub/FireDeductionRoom.cs index f6e6dd6..59292e9 100644 --- a/AX.WebDrillServer/Services/FireDeductionHub/FireDeductionRoom.cs +++ b/AX.WebDrillServer/Services/FireDeductionHub/FireDeductionRoom.cs @@ -4,15 +4,16 @@ namespace AX.WebDrillServer.Services.FireDeductionHub { public enum RoomCreateResult { - 成功 = 0, - 房间重名, - 用户不存在 + Success = 0,//成功 + RoomReName,//房间重名 + RoomNameEmpty,//房间名为空 + NoUserExist,//用户不存在 } public enum RoomState { - 准备 = 0, - 进行中, - 结束 + Ready = 0,//准备 + Playing,//进行中 + Over,//结束 } /// /// 沙盘推演房间 @@ -25,7 +26,7 @@ namespace AX.WebDrillServer.Services.FireDeductionHub /// 房间密码 /// public string? Password; - public RoomState State { get; set; } = RoomState.准备; + public RoomState State { get; set; } = RoomState.Ready; /// /// 房间最大人数 /// @@ -34,6 +35,7 @@ namespace AX.WebDrillServer.Services.FireDeductionHub /// 房间所属,默认是创建者 /// public string Owner { get; set; } = null!; + public string OwnerName { get; set; } = null!; public List Users { get; set; } = new List(); public Dictionary? FrameData { get; set; } public Dictionary? EventData { get; set; } diff --git a/AX.WebDrillServer/Services/FireDeductionHub/RoomCreateDto.cs b/AX.WebDrillServer/Services/FireDeductionHub/RoomCreateData.cs similarity index 87% rename from AX.WebDrillServer/Services/FireDeductionHub/RoomCreateDto.cs rename to AX.WebDrillServer/Services/FireDeductionHub/RoomCreateData.cs index c358547..c30d594 100644 --- a/AX.WebDrillServer/Services/FireDeductionHub/RoomCreateDto.cs +++ b/AX.WebDrillServer/Services/FireDeductionHub/RoomCreateData.cs @@ -1,6 +1,6 @@ namespace AX.WebDrillServer.Services.FireDeductionHub { - public class RoomCreateDto + public class RoomCreateData { public string UserId { get; set; } = null!; public string? Password { get; set; } diff --git a/AX.WebDrillServer/Services/FireDeductionHub/RoomCreateResultData.cs b/AX.WebDrillServer/Services/FireDeductionHub/RoomCreateResultData.cs index 8cc0bb0..84d19b2 100644 --- a/AX.WebDrillServer/Services/FireDeductionHub/RoomCreateResultData.cs +++ b/AX.WebDrillServer/Services/FireDeductionHub/RoomCreateResultData.cs @@ -3,6 +3,6 @@ public class RoomCreateResultData { public RoomCreateResult RoomCreateResult { get; set; } - public FireDeductionRoom? CreatedRoom { get; set; } + public RoomShowInfo? CreatedRoom { get; set; } } } diff --git a/AX.WebDrillServer/Services/FireDeductionHub/RoomManager.cs b/AX.WebDrillServer/Services/FireDeductionHub/RoomManager.cs index 3b25998..bf4abf8 100644 --- a/AX.WebDrillServer/Services/FireDeductionHub/RoomManager.cs +++ b/AX.WebDrillServer/Services/FireDeductionHub/RoomManager.cs @@ -5,11 +5,41 @@ private List fireDeductionRooms = new List(); private List fireDeductionUsers = new List(); - public List GetAllRooms() + + public RoomShowInfo RoomToInfo(FireDeductionRoom source, RoomShowInfo info = null!) + { + if (info == null) + { + info = new RoomShowInfo(); + } + info.RoomId = source.RoomId; + info.RoomName = source.RoomName; + info.Owner = source.Owner; + info.OwnerName = source.OwnerName; + info.IsLock = !string.IsNullOrEmpty(source.Password); + info.MaxPersons = source.MaxPersons; + info.State = source.State; + + return info; + } + public bool IsRoomNameSame(string OwnerId, string RoomName) { lock (this) { - return fireDeductionRooms; + var room = fireDeductionRooms.Where(r => r.Owner == OwnerId && r.RoomName == RoomName).SingleOrDefault(); + return room != null; + } + } + public List GetAllRooms() + { + lock (this) + { + List infos = new List(); + foreach (var item in fireDeductionRooms) + { + infos.Add(RoomToInfo(item)); + } + return infos; } } public List GetAllUsers() diff --git a/AX.WebDrillServer/Services/FireDeductionHub/RoomShowInfo.cs b/AX.WebDrillServer/Services/FireDeductionHub/RoomShowInfo.cs new file mode 100644 index 0000000..04a104a --- /dev/null +++ b/AX.WebDrillServer/Services/FireDeductionHub/RoomShowInfo.cs @@ -0,0 +1,25 @@ +namespace AX.WebDrillServer.Services.FireDeductionHub +{ + /// + /// 给定的房间信息 + /// + public class RoomShowInfo + { + public string RoomId { get; set; } = null!; + public string RoomName { get; set; } = null!; + public RoomState State { get; set; } = RoomState.Ready; + /// + /// 房间最大人数 + /// + public int MaxPersons = 100; + /// + /// 房间所属,默认是创建者 + /// + public string Owner { get; set; } = null!; + public string OwnerName { get; set; } = null!; + /// + /// 是否有密码 + /// + public bool IsLock { get; set; } + } +}