Browse Source

推演相关API优化

develop
杨栋梁 3 years ago
parent
commit
f3578237b1
  1. 47
      AX.WebDrillServer/Hubs/FireDeductionHub.cs
  2. 44
      AX.WebDrillServer/Services/FireDeductionHub/Drill.cs
  3. 2
      AX.WebDrillServer/Services/FireDeductionHub/EndDrillData.cs
  4. 11
      AX.WebDrillServer/Services/FireDeductionHub/FireDeductionRoom.cs
  5. 6
      AX.WebDrillServer/Services/FireDeductionHub/FireDeductionRoomEnums.cs
  6. 2
      AX.WebDrillServer/Services/FireDeductionHub/PlayerOrder.cs
  7. 2
      AX.WebDrillServer/Services/FireDeductionHub/RoomManager.cs
  8. 2
      AX.WebDrillServer/Services/FireDeductionHub/RoomSendInfo.cs
  9. 1
      AX.WebDrillServer/Services/FireDeductionHub/StartDrillResultData.cs

47
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);

44
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; }
/// <summary>
/// 演练名称
/// </summary>
public string? DrillName { get; set; }
public long StartTime { get; set; }
public long EndTime { get; set; } = 0;
public List<FireDeductionUser> Users { get; set; } = new List<FireDeductionUser>();
public List<RoomSendInfo> Infos = new List<RoomSendInfo>();
/// <summary>
/// 获取推演时间,如果传入时间表示获取传入时间到开始时间的时间
/// </summary>
/// <param name="time">毫秒</param>
/// <returns></returns>
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;
}
}
}
}
}

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

11
AX.WebDrillServer/Services/FireDeductionHub/FireDeductionRoom.cs

@ -23,16 +23,9 @@ namespace AX.WebDrillServer.Services.FireDeductionHub
/// </summary>
public string Owner { get; set; } = null!;
public string OwnerName { get; set; } = null!;
/// <summary>
/// 演练名称
/// </summary>
public string? DrillName { get; set; }
public long StartTime { get; set; }
public long EndTime { get; set; }
public long DrillTime { get; set; }
public List<Drill> Drills = new List<Drill>();
public List<FireDeductionUser> Users { get; set; } = new List<FireDeductionUser>();
public Dictionary<DateTime, string>? FrameData { get; set; }
public Dictionary<DateTime, string>? EventData { get; set; }
}
}

6
AX.WebDrillServer/Services/FireDeductionHub/FireDeductionRoomEnums.cs

@ -39,6 +39,12 @@
Failed,//失败
}
public enum DrillState
{
Pause = 0,//暂停中
Playing,//进行中
Over,//结束
}
public class FireDeductionRoomEnums
{

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

2
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;

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

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

Loading…
Cancel
Save