From f3578237b1c455752c147cf8abfc4312b19a4705 Mon Sep 17 00:00:00 2001 From: YDL <1368269699@QQ.COM> Date: Thu, 29 Sep 2022 10:16:19 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8E=A8=E6=BC=94=E7=9B=B8=E5=85=B3API?= =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- AX.WebDrillServer/Hubs/FireDeductionHub.cs | 47 ++++++++++--------- .../Services/FireDeductionHub/Drill.cs | 44 +++++++++++++++++ .../Services/FireDeductionHub/EndDrillData.cs | 2 +- .../FireDeductionHub/FireDeductionRoom.cs | 11 +---- .../FireDeductionRoomEnums.cs | 6 +++ .../Services/FireDeductionHub/PlayerOrder.cs | 2 +- .../Services/FireDeductionHub/RoomManager.cs | 2 +- .../Services/FireDeductionHub/RoomSendInfo.cs | 2 +- .../FireDeductionHub/StartDrillResultData.cs | 1 + 9 files changed, 82 insertions(+), 35 deletions(-) create mode 100644 AX.WebDrillServer/Services/FireDeductionHub/Drill.cs diff --git a/AX.WebDrillServer/Hubs/FireDeductionHub.cs b/AX.WebDrillServer/Hubs/FireDeductionHub.cs index 98d4b4a..4055e03 100644 --- a/AX.WebDrillServer/Hubs/FireDeductionHub.cs +++ b/AX.WebDrillServer/Hubs/FireDeductionHub.cs @@ -242,8 +242,18 @@ namespace AX.WebDrillServer.Hubs StartTime = DateTime.Now.Ticks, }; room.State = RoomState.Playing; - room.DrillName = startData.Name; - room.StartTime = DateTime.Now.Ticks; + Drill drill = new() + { + DrillName = startData.Name, + StartTime = DateTime.Now.Ticks, + DrillState = DrillState.Playing + }; + foreach (var item in room.Users) + { + drill.Users.Add(item); + } + drill.Id = Guid.NewGuid().ToString(); + drill.RoomId = room.RoomId; await Clients.Group(room.RoomId).SendAsync("CallWeb_StartDrill", resultData); return resultData; @@ -281,15 +291,12 @@ namespace AX.WebDrillServer.Hubs resultData.ResultType = DrillResult.Success; resultData.EndData = new() { - Name = room.DrillName!, - StartTime = DateTime.Now.Ticks, + Name = room.Drills[0].DrillName!, + EndTime = DateTime.Now.Ticks, //Ticks是一个以0 .1纳秒为单位的时间戳 }; room.State = RoomState.Over; - room.EndTime = DateTime.Now.Ticks; - //Ticks是一个以0 .1纳秒为单位的时间戳 - //1 毫秒=1000000 纳秒 - //如果需要换算成具体秒数 second = (room.EndTime - room.StartTime)/10000000 - room.DrillTime = room.EndTime - room.StartTime; + room.Drills[room.Drills.Count - 1].EndTime = resultData.EndData.EndTime; + room.Drills[room.Drills.Count - 1].DrillState = DrillState.Over; await Clients.Group(room.RoomId).SendAsync("CallWeb_EndDrill", resultData); return resultData; @@ -322,15 +329,14 @@ namespace AX.WebDrillServer.Hubs else { //计算DrillTime - room.DrillTime = DateTime.Now.Ticks - room.StartTime; DrillShowData resultData = new() { - DrillTime = room.DrillTime, - Name = room.RoomName, + DrillTime = room.Drills[room.Drills.Count - 1].GetDrillLastTime(), + Name = room.Drills[room.Drills.Count - 1].DrillName, Owner = roomManager.GetUser(room.Owner)!, - EndTime = room.EndTime, - StartTime = room.StartTime, - Players = room.Users, + EndTime = room.Drills[room.Drills.Count - 1].EndTime, + StartTime = room.Drills[room.Drills.Count - 1].StartTime, + Players = room.Drills[room.Drills.Count - 1].Users, }; return resultData; } @@ -356,11 +362,12 @@ namespace AX.WebDrillServer.Hubs //存储一份数据 var info = new RoomSendInfo() { - RoomId = room.RoomId, UserId = userId!, Time = data.Time, + RoomId = room.RoomId, InfoData = data.Data.ToJson(), }; + room.Drills[room.Drills.Count - 1].Infos.Add(info); roomManager.SaveRoomSendInfo(info); } } @@ -379,18 +386,14 @@ namespace AX.WebDrillServer.Hubs if (room != null) { - var data = roomManager.GetRoomSendInfoByRoomId(room.RoomId); + var data = room.Drills[room.Drills.Count - 1].Infos; foreach (var item in data) { - //JsonElement json=(JsonElement)item.InfoData; - - PlayerOrder result = new PlayerOrder { UserId = item.UserId!, - - + Data = item.InfoData!, Time = item.Time, }; resultData.Add(result); diff --git a/AX.WebDrillServer/Services/FireDeductionHub/Drill.cs b/AX.WebDrillServer/Services/FireDeductionHub/Drill.cs new file mode 100644 index 0000000..4c2f23a --- /dev/null +++ b/AX.WebDrillServer/Services/FireDeductionHub/Drill.cs @@ -0,0 +1,44 @@ +namespace AX.WebDrillServer.Services.FireDeductionHub +{ + public class Drill + { + public string Id { get; set; } = null!; + public string RoomId { get; set; } = null!; + public DrillState DrillState { get; set; } + /// + /// 演练名称 + /// + public string? DrillName { get; set; } + public long StartTime { get; set; } + + public long EndTime { get; set; } = 0; + + public List Users { get; set; } = new List(); + + public List Infos = new List(); + + /// + /// 获取推演时间,如果传入时间表示获取传入时间到开始时间的时间 + /// + /// 毫秒 + /// + public long GetDrillLastTime(long time = -1) + { + if (EndTime != 0)//已经结束 + { + return (EndTime - StartTime) / 10000; + } + else + { + if (time == -1) + { + return (DateTime.Now.Ticks - StartTime) / 10000; + } + else + { + return (time - StartTime) / 10000; + } + } + } + } +} diff --git a/AX.WebDrillServer/Services/FireDeductionHub/EndDrillData.cs b/AX.WebDrillServer/Services/FireDeductionHub/EndDrillData.cs index 5ed2083..c0eea74 100644 --- a/AX.WebDrillServer/Services/FireDeductionHub/EndDrillData.cs +++ b/AX.WebDrillServer/Services/FireDeductionHub/EndDrillData.cs @@ -3,6 +3,6 @@ public class EndDrillData { public string Name { get; set; } = null!; - public long StartTime { get; set; } + public long EndTime { get; set; } } } diff --git a/AX.WebDrillServer/Services/FireDeductionHub/FireDeductionRoom.cs b/AX.WebDrillServer/Services/FireDeductionHub/FireDeductionRoom.cs index 69f1468..1075836 100644 --- a/AX.WebDrillServer/Services/FireDeductionHub/FireDeductionRoom.cs +++ b/AX.WebDrillServer/Services/FireDeductionHub/FireDeductionRoom.cs @@ -23,16 +23,9 @@ namespace AX.WebDrillServer.Services.FireDeductionHub /// public string Owner { get; set; } = null!; public string OwnerName { get; set; } = null!; - /// - /// 演练名称 - /// - public string? DrillName { get; set; } - public long StartTime { get; set; } - public long EndTime { get; set; } - public long DrillTime { get; set; } + public List Drills = new List(); + public List Users { get; set; } = new List(); - public Dictionary? FrameData { get; set; } - public Dictionary? EventData { get; set; } } } diff --git a/AX.WebDrillServer/Services/FireDeductionHub/FireDeductionRoomEnums.cs b/AX.WebDrillServer/Services/FireDeductionHub/FireDeductionRoomEnums.cs index 91aa6ae..5e4a6f1 100644 --- a/AX.WebDrillServer/Services/FireDeductionHub/FireDeductionRoomEnums.cs +++ b/AX.WebDrillServer/Services/FireDeductionHub/FireDeductionRoomEnums.cs @@ -39,6 +39,12 @@ Failed,//失败 } + public enum DrillState + { + Pause = 0,//暂停中 + Playing,//进行中 + Over,//结束 + } public class FireDeductionRoomEnums { diff --git a/AX.WebDrillServer/Services/FireDeductionHub/PlayerOrder.cs b/AX.WebDrillServer/Services/FireDeductionHub/PlayerOrder.cs index cded728..cc703b0 100644 --- a/AX.WebDrillServer/Services/FireDeductionHub/PlayerOrder.cs +++ b/AX.WebDrillServer/Services/FireDeductionHub/PlayerOrder.cs @@ -6,6 +6,6 @@ namespace AX.WebDrillServer.Services.FireDeductionHub { public string UserId { get; set; } = null!; public long Time { get; set; } - public JsonElement Data { get; set; } + public object Data { get; set; } = null!; } } diff --git a/AX.WebDrillServer/Services/FireDeductionHub/RoomManager.cs b/AX.WebDrillServer/Services/FireDeductionHub/RoomManager.cs index f080f56..7266d3a 100644 --- a/AX.WebDrillServer/Services/FireDeductionHub/RoomManager.cs +++ b/AX.WebDrillServer/Services/FireDeductionHub/RoomManager.cs @@ -28,7 +28,7 @@ bool result = false; lock (this) { - if (roomSendInfos.Contains(info)) + if (!roomSendInfos.Contains(info)) { roomSendInfos.Add(info); result = true; diff --git a/AX.WebDrillServer/Services/FireDeductionHub/RoomSendInfo.cs b/AX.WebDrillServer/Services/FireDeductionHub/RoomSendInfo.cs index ff78bec..bb0995f 100644 --- a/AX.WebDrillServer/Services/FireDeductionHub/RoomSendInfo.cs +++ b/AX.WebDrillServer/Services/FireDeductionHub/RoomSendInfo.cs @@ -4,7 +4,7 @@ { public string RoomId { get; set; } = null!; public string UserId { get; set; } = null!; - public long Time { get; set; } + public long Time; public string? InfoData; } } diff --git a/AX.WebDrillServer/Services/FireDeductionHub/StartDrillResultData.cs b/AX.WebDrillServer/Services/FireDeductionHub/StartDrillResultData.cs index fdbe0af..0cc8e12 100644 --- a/AX.WebDrillServer/Services/FireDeductionHub/StartDrillResultData.cs +++ b/AX.WebDrillServer/Services/FireDeductionHub/StartDrillResultData.cs @@ -2,6 +2,7 @@ { public class StartDrillResultData { + public string DrillId { get; set; } = null!; public DrillResult ResultType { get; set; } public StartDrillData StartData { get; set; } = null!; }