diff --git a/src/CommandHandlers/ElapsedTimeSyncHandler.cs b/src/CommandHandlers/ElapsedTimeSyncHandler.cs new file mode 100644 index 0000000..04f485b --- /dev/null +++ b/src/CommandHandlers/ElapsedTimeSyncHandler.cs @@ -0,0 +1,20 @@ +using sodoffmmo.Attributes; +using sodoffmmo.Core; +using sodoffmmo.Data; + +namespace sodoffmmo.CommandHandlers; + +[ExtensionCommandHandler("RTM")] +class ElapsedTimeSyncHandler : CommandHandler { + public override Task Handle(Client client, NetworkObject receivedObject) { + if (client.Room != null) { + NetworkObject cmd = new(); + NetworkObject obj = new(); + obj.Add("arr", new string[] { "RTM", "-1", client.Room.ElapsedTime.ElapsedMilliseconds.ToString() }); + cmd.Add("c", "RTM"); + cmd.Add("p", obj); + client.Send(NetworkObject.WrapObject(1, 13, cmd).Serialize()); + } + return Task.CompletedTask; + } +} \ No newline at end of file diff --git a/src/Core/Room.cs b/src/Core/Room.cs index 5e59735..4d37e24 100644 --- a/src/Core/Room.cs +++ b/src/Core/Room.cs @@ -1,4 +1,5 @@ using System; +using System.Diagnostics; using sodoffmmo.Data; namespace sodoffmmo.Core; @@ -18,6 +19,7 @@ public class Room { public bool AllowChatOverride { get; set; } = false; public NetworkArray RoomVariables = new(); + public readonly Stopwatch ElapsedTime = new Stopwatch(); public Room(string? name, string? group = null, bool autoRemove = false) { Id = ++MaxId; @@ -33,6 +35,7 @@ public class Room { } AutoRemove = autoRemove; rooms.Add(Name, this); + ElapsedTime.Start(); } public int ClientsCount => clients.Count;