using System; using System.Text.Json.Nodes; using Robust.Server.ServerStatus; using Robust.Shared.IoC; using Robust.Shared.ViewVariables; namespace Content.Server.GameTicking { public partial class GameTicker { /// /// Used for thread safety, given is called from another thread. /// private readonly object _statusShellLock = new(); /// /// Round start time in UTC, for status shell purposes. /// [ViewVariables] private DateTime _roundStartDateTime; private void InitializeStatusShell() { IoCManager.Resolve().OnStatusRequest += GetStatusResponse; } private void GetStatusResponse(JsonNode jObject) { // This method is raised from another thread, so this better be thread safe! lock (_statusShellLock) { jObject["name"] = _baseServer.ServerName; jObject["players"] = _playerManager.PlayerCount; jObject["run_level"] = (int) _runLevel; if (_runLevel >= GameRunLevel.InRound) { jObject["round_start_time"] = _roundStartDateTime.ToString("o"); } } } } }