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!;
}