From b58f01d1019c3ae80ca3c069248a82ae896ffb4d Mon Sep 17 00:00:00 2001 From: Robert Paciorek Date: Sun, 21 Jan 2024 02:53:14 +0000 Subject: [PATCH] rework pre-battle timer (notificartion) --- src/CommandHandlers/LoginHandler.cs | 22 +------ src/CommandHandlers/WorldEventHandlers.cs | 6 +- src/Core/Room.cs | 4 ++ src/Core/Utils.cs | 18 +++--- src/Core/WorldEvent.cs | 73 ++++++++++++++++------- 5 files changed, 68 insertions(+), 55 deletions(-) diff --git a/src/CommandHandlers/LoginHandler.cs b/src/CommandHandlers/LoginHandler.cs index 294fd1f..0107093 100644 --- a/src/CommandHandlers/LoginHandler.cs +++ b/src/CommandHandlers/LoginHandler.cs @@ -27,26 +27,6 @@ class LoginHandler : ICommandHandler rl.Add(r1); NetworkArray r2 = new(); - - NetworkArray we = new(); - NetworkArray we1 = new(); - NetworkArray we2 = new(); - - we1.Add("WE_ScoutAttack"); - we1.Add((Byte)4); - we1.Add(WorldEvent.Get().EventInfo()); - we1.Add(false); - we1.Add(true); - - we2.Add("WEN_ScoutAttack"); - we2.Add((Byte)4); - we2.Add(WorldEvent.Get().EventInfoNext()); - we2.Add(false); - we2.Add(true); - - we.Add(we1); - we.Add(we2); - r2.Add(1); r2.Add("ADMIN"); r2.Add("default"); @@ -55,7 +35,7 @@ class LoginHandler : ICommandHandler r2.Add(true); r2.Add((short)0); r2.Add((short)1); - r2.Add(we); + r2.Add(WorldEvent.Get().EventInfoArray(true)); rl.Add(r2); NetworkArray r3 = new(); diff --git a/src/CommandHandlers/WorldEventHandlers.cs b/src/CommandHandlers/WorldEventHandlers.cs index 311a7c2..3d102c1 100644 --- a/src/CommandHandlers/WorldEventHandlers.cs +++ b/src/CommandHandlers/WorldEventHandlers.cs @@ -32,7 +32,8 @@ class WorldEventHealthHandler : ICommandHandler { // send: {"a":11,"c":0,"p":{"r":367256,"vl":[["WEH_ZydLUmCC1",4,"0.33133352,Thu Jun 22 02:02:43 UTC 2023",false,false]]}} NetworkPacket packet = Utils.VlNetworkPacket( "WEH_" + targetUid, - health.ToString("0.0#####", CultureInfo.GetCultureInfo("en-US")) + "," + DateTime.UtcNow.ToString("ddd MMM dd HH:mm:ss UTC yyyy", CultureInfo.GetCultureInfo("en-US")) + health.ToString("0.0#####", CultureInfo.GetCultureInfo("en-US")) + "," + DateTime.UtcNow.ToString("ddd MMM dd HH:mm:ss UTC yyyy", CultureInfo.GetCultureInfo("en-US")), + WorldEvent.Get().GetRoom().Id ); foreach (var roomClient in WorldEvent.Get().GetRoom().Clients) { roomClient.Send(packet); @@ -50,7 +51,8 @@ class WorldEventFlareHandler : ICommandHandler { // send: {"a":11,"c":0,"p":{"r":403777,"vl":[["WEF_WpnpDyJ51,14,0",4,"0,6/29/2023 3:03:18 AM",false,false]]}} NetworkPacket packet = Utils.VlNetworkPacket( "WEF_" + p.Get("fuid"), - p.Get("oh") + "," + p.Get("ts") + p.Get("oh") + "," + p.Get("ts"), + WorldEvent.Get().GetRoom().Id ); foreach (var roomClient in WorldEvent.Get().GetRoom().Clients) { roomClient.Send(packet); diff --git a/src/Core/Room.cs b/src/Core/Room.cs index 94dc6b0..fb20ef7 100644 --- a/src/Core/Room.cs +++ b/src/Core/Room.cs @@ -50,4 +50,8 @@ public class Room { public static void Add(string name) { rooms[name] = new Room(rooms.Count + 3, name); } + + public static Room[] AllRooms() { + return rooms.Values.ToArray(); + } } diff --git a/src/Core/Utils.cs b/src/Core/Utils.cs index 0cf7d4f..4f85ef4 100644 --- a/src/Core/Utils.cs +++ b/src/Core/Utils.cs @@ -22,23 +22,23 @@ internal static class Utils { return true; } - public static NetworkPacket VlNetworkPacket(NetworkArray vl2, int roomID) { - NetworkObject wedata = new(); - NetworkArray vl = new(); - vl.Add(vl2); - wedata.Add("r", roomID); - wedata.Add("vl", vl); - return NetworkObject.WrapObject(0, 11, wedata).Serialize(); + public static NetworkPacket VlNetworkPacket(NetworkArray vl, int roomID) { + NetworkObject obj = new(); + obj.Add("r", roomID); + obj.Add("vl", vl); + return NetworkObject.WrapObject(0, 11, obj).Serialize(); } - public static NetworkPacket VlNetworkPacket(string a, string b) { + public static NetworkPacket VlNetworkPacket(string a, string b, int roomID) { + NetworkArray vl = new(); NetworkArray vl2 = new(); vl2.Add(a); vl2.Add((Byte)4); vl2.Add(b); vl2.Add(false); vl2.Add(false); - return VlNetworkPacket(vl2, WorldEvent.Get().GetRoom().Id); + vl.Add(vl2); + return VlNetworkPacket(vl, roomID); } public static NetworkPacket ArrNetworkPacket(string[] data) { diff --git a/src/Core/WorldEvent.cs b/src/Core/WorldEvent.cs index 2cf44f5..dada141 100644 --- a/src/Core/WorldEvent.cs +++ b/src/Core/WorldEvent.cs @@ -12,7 +12,7 @@ class WorldEvent { private static WorldEvent _instance = null; private object EventLock = new object(); private Random random = new Random(); - private System.Timers.Timer timer; + private System.Timers.Timer timer = null; public static WorldEvent Get() { if (_instance == null) { @@ -22,7 +22,7 @@ class WorldEvent { } private WorldEvent() { - Reset(1.3f); + Reset(3.3f); } private Room room; @@ -52,9 +52,25 @@ class WorldEvent { endTimeIsSet = false; Console.WriteLine($"Event {uid} start time: {startTimeString}"); + + ResetTimer((endTime - DateTime.UtcNow).TotalSeconds + 30); } } + private void ResetTimer(double timeout) { + if (timer != null) { + timer.Stop(); + timer.Close(); + } + + timer = new System.Timers.Timer(timeout * 1000); + timer.Elapsed += PostEndEvent; + timer.AutoReset = false; + timer.Enabled = true; + + Console.WriteLine($"Event {uid} reset timer set to {timeout} s"); + } + private void InitEvent() { lock (EventLock) { if (AITime < DateTime.UtcNow) { @@ -69,7 +85,7 @@ class WorldEvent { state = State.Active; } - operatorAI.Send(Utils.VlNetworkPacket("WE__AI", operatorAI.PlayerData.Uid)); + operatorAI.Send(Utils.VlNetworkPacket("WE__AI", operatorAI.PlayerData.Uid, room.Id)); Console.WriteLine($"Event {uid} AI operator: {operatorAI.PlayerData.Uid}"); } } @@ -96,7 +112,8 @@ class WorldEvent { NetworkPacket packet = Utils.VlNetworkPacket( "WE_ScoutAttack_End", - $"{uid};{results};{scores};{targets}" + $"{uid};{results};{scores};{targets}", + room.Id ); foreach (var roomClient in room.Clients) { roomClient.Send(packet); @@ -104,7 +121,6 @@ class WorldEvent { Console.WriteLine($"Event {uid} end: {results} {targets}"); - NetworkObject wedata = new(); NetworkArray vl = new(); NetworkArray vl1 = new(); vl1.Add("WE__AI"); @@ -129,20 +145,13 @@ class WorldEvent { vl3.Add(false); vl.Add(vl3); } - wedata.Add("r", room.Id); - wedata.Add("vl", vl); - packet = NetworkObject.WrapObject(0, 11, wedata).Serialize(); - + packet = Utils.VlNetworkPacket(vl, room.Id); foreach (var roomClient in room.Clients) { roomClient.Send(packet); } - Reset(4); - - timer = new System.Timers.Timer(10000); - timer.Elapsed += PostEndEvent; - timer.AutoReset = false; - timer.Enabled = true; + // (re)schedule event reset and announcement of next event + ResetTimer(10); return true; } @@ -150,12 +159,14 @@ class WorldEvent { } private void PostEndEvent(Object source, ElapsedEventArgs e) { - NetworkPacket packet = Utils.ArrNetworkPacket( new string[] { - "WESR", - "WE_ScoutAttack|" + EventInfo() - }); - foreach (var roomClient in room.Clients) { - roomClient.Send(packet); + Reset(7); + + Console.WriteLine($"Event {uid} send event notification (WE_ + WEN_) to all clients"); + NetworkPacket packet = Utils.VlNetworkPacket(EventInfoArray(), room.Id); + foreach (var r in Room.AllRooms()) { + foreach (var roomClient in r.Clients) { + roomClient.Send(packet); + } } } @@ -164,8 +175,24 @@ class WorldEvent { return startTimeString + "," + uid + ", false, HubTrainingDO"; } - public string EventInfoNext() { - return startTimeString; // TODO on og this was different time (real next event?) + public NetworkArray EventInfoArray(bool x = false) { + NetworkArray vl = new(); + NetworkArray vl1 = new(); + vl1.Add("WE_ScoutAttack"); + vl1.Add((Byte)4); + vl1.Add(EventInfo()); + vl1.Add(false); + vl1.Add(x); + vl.Add(vl1); + NetworkArray vl2 = new(); + vl2.Add("WEN_ScoutAttack"); + vl2.Add((Byte)4); + vl2.Add(startTimeString); + vl2.Add(false); + vl2.Add(x); + vl.Add(vl2); + + return vl; } public string GetUid() => uid;