* Engine namespace changes.
* Automated remove redundant using statements.
* Simplified Graphics namespace.
* Apparently the container system stores full type names in the map file.😞 This updates those names.
* API Changes to LocalizationManager.LoadCulture.
* Update submodule to v0.3.2
61 lines
1.8 KiB
C#
61 lines
1.8 KiB
C#
using System;
|
|
using Content.Server.GameTicking;
|
|
using Content.Server.Interfaces.GameTicking;
|
|
using Newtonsoft.Json.Linq;
|
|
using Robust.Server;
|
|
using Robust.Server.Player;
|
|
using Robust.Server.ServerStatus;
|
|
using Robust.Shared.IoC;
|
|
|
|
namespace Content.Server
|
|
{
|
|
/// <summary>
|
|
/// Tiny helper class to handle status messages. Nothing too complicated.
|
|
/// </summary>
|
|
public class StatusShell
|
|
{
|
|
private readonly IPlayerManager _playerManager;
|
|
private readonly string _name;
|
|
private GameRunLevel _runLevel;
|
|
private DateTime _roundStartTime;
|
|
|
|
public StatusShell()
|
|
{
|
|
_playerManager = IoCManager.Resolve<IPlayerManager>();
|
|
var baseServer = IoCManager.Resolve<IBaseServer>();
|
|
var gameTicker = IoCManager.Resolve<IGameTicker>();
|
|
|
|
gameTicker.OnRunLevelChanged += _runLevelChanged;
|
|
|
|
_name = baseServer.ServerName;
|
|
IoCManager.Resolve<IStatusHost>().OnStatusRequest += _getResponse;
|
|
}
|
|
|
|
private void _getResponse(JObject jObject)
|
|
{
|
|
lock (this)
|
|
{
|
|
jObject["name"] = _name;
|
|
jObject["players"] = _playerManager.PlayerCount;
|
|
jObject["run_level"] = (int) _runLevel;
|
|
if (_runLevel >= GameRunLevel.InRound)
|
|
{
|
|
jObject["round_start_time"] = _roundStartTime.ToString("o");
|
|
}
|
|
}
|
|
}
|
|
|
|
private void _runLevelChanged(GameRunLevelChangedEventArgs eventArgs)
|
|
{
|
|
lock (this)
|
|
{
|
|
_runLevel = eventArgs.NewRunLevel;
|
|
if (eventArgs.NewRunLevel == GameRunLevel.InRound)
|
|
{
|
|
_roundStartTime = DateTime.UtcNow;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|