Exception tolerance for GameTicker.ResettingCleanup.
This commit is contained in:
@@ -139,13 +139,13 @@ namespace Content.Server.GameTicking
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Logger.Error($"Grid {grid.Index} ({grid.GridEntityId}) specified that it was part of station {partOfStation.Id} which does not exist");
|
_sawmill.Error($"Grid {grid.Index} ({grid.GridEntityId}) specified that it was part of station {partOfStation.Id} which does not exist");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var timeSpan = _gameTiming.RealTime - startTime;
|
var timeSpan = _gameTiming.RealTime - startTime;
|
||||||
Logger.InfoS("ticker", $"Loaded maps in {timeSpan.TotalMilliseconds:N2}ms.");
|
_sawmill.Info($"Loaded maps in {timeSpan.TotalMilliseconds:N2}ms.");
|
||||||
}
|
}
|
||||||
|
|
||||||
private void SetupGridStation(IMapGrid grid)
|
private void SetupGridStation(IMapGrid grid)
|
||||||
@@ -179,7 +179,7 @@ namespace Content.Server.GameTicking
|
|||||||
_startingRound = true;
|
_startingRound = true;
|
||||||
|
|
||||||
DebugTools.Assert(RunLevel == GameRunLevel.PreRoundLobby);
|
DebugTools.Assert(RunLevel == GameRunLevel.PreRoundLobby);
|
||||||
Logger.InfoS("ticker", "Starting round!");
|
_sawmill.Info("Starting round!");
|
||||||
|
|
||||||
SendServerMessage(Loc.GetString("game-ticker-start-round"));
|
SendServerMessage(Loc.GetString("game-ticker-start-round"));
|
||||||
|
|
||||||
@@ -258,14 +258,13 @@ namespace Content.Server.GameTicking
|
|||||||
|
|
||||||
if (RoundStartFailShutdownCount > 0 && _roundStartFailCount >= RoundStartFailShutdownCount)
|
if (RoundStartFailShutdownCount > 0 && _roundStartFailCount >= RoundStartFailShutdownCount)
|
||||||
{
|
{
|
||||||
Logger.FatalS("ticker",
|
_sawmill.Fatal($"Failed to start a round {_roundStartFailCount} time(s) in a row... Shutting down!");
|
||||||
$"Failed to start a round {_roundStartFailCount} time(s) in a row... Shutting down!");
|
|
||||||
_runtimeLog.LogException(e, nameof(GameTicker));
|
_runtimeLog.LogException(e, nameof(GameTicker));
|
||||||
_baseServer.Shutdown("Restarting server");
|
_baseServer.Shutdown("Restarting server");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
Logger.WarningS("ticker", $"Exception caught while trying to start the round! Restarting round...");
|
_sawmill.Warning($"Exception caught while trying to start the round! Restarting round...");
|
||||||
_runtimeLog.LogException(e, nameof(GameTicker));
|
_runtimeLog.LogException(e, nameof(GameTicker));
|
||||||
_startingRound = false;
|
_startingRound = false;
|
||||||
RestartRound();
|
RestartRound();
|
||||||
@@ -292,7 +291,7 @@ namespace Content.Server.GameTicking
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
DebugTools.Assert(RunLevel == GameRunLevel.InRound);
|
DebugTools.Assert(RunLevel == GameRunLevel.InRound);
|
||||||
Logger.InfoS("ticker", "Ending round!");
|
_sawmill.Info("Ending round!");
|
||||||
|
|
||||||
RunLevel = GameRunLevel.PostRound;
|
RunLevel = GameRunLevel.PostRound;
|
||||||
|
|
||||||
@@ -376,7 +375,7 @@ namespace Content.Server.GameTicking
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
Logger.InfoS("ticker", "Restarting round!");
|
_sawmill.Info("Restarting round!");
|
||||||
|
|
||||||
SendServerMessage(Loc.GetString("game-ticker-restart-round"));
|
SendServerMessage(Loc.GetString("game-ticker-restart-round"));
|
||||||
|
|
||||||
@@ -425,9 +424,22 @@ namespace Content.Server.GameTicking
|
|||||||
// Delete all entities.
|
// Delete all entities.
|
||||||
foreach (var entity in EntityManager.GetEntities().ToArray())
|
foreach (var entity in EntityManager.GetEntities().ToArray())
|
||||||
{
|
{
|
||||||
|
#if EXCEPTION_TOLERANCE
|
||||||
|
try
|
||||||
|
{
|
||||||
|
#endif
|
||||||
// TODO: Maybe something less naive here?
|
// TODO: Maybe something less naive here?
|
||||||
// FIXME: Actually, definitely.
|
// FIXME: Actually, definitely.
|
||||||
EntityManager.DeleteEntity(entity);
|
EntityManager.DeleteEntity(entity);
|
||||||
|
#if EXCEPTION_TOLERANCE
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
_sawmill.Error($"Caught exception while trying to delete entity {ToPrettyString(entity)}, this might corrupt the game state...");
|
||||||
|
_runtimeLog.LogException(e, nameof(GameTicker));
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
_mapManager.Restart();
|
_mapManager.Restart();
|
||||||
|
|||||||
@@ -34,6 +34,8 @@ namespace Content.Server.GameTicking
|
|||||||
|
|
||||||
[ViewVariables] public MapId DefaultMap { get; private set; }
|
[ViewVariables] public MapId DefaultMap { get; private set; }
|
||||||
|
|
||||||
|
private ISawmill _sawmill = default!;
|
||||||
|
|
||||||
public override void Initialize()
|
public override void Initialize()
|
||||||
{
|
{
|
||||||
base.Initialize();
|
base.Initialize();
|
||||||
@@ -41,6 +43,8 @@ namespace Content.Server.GameTicking
|
|||||||
DebugTools.Assert(!_initialized);
|
DebugTools.Assert(!_initialized);
|
||||||
DebugTools.Assert(!_postInitialized);
|
DebugTools.Assert(!_postInitialized);
|
||||||
|
|
||||||
|
_sawmill = _logManager.GetSawmill("ticker");
|
||||||
|
|
||||||
// Initialize the other parts of the game ticker.
|
// Initialize the other parts of the game ticker.
|
||||||
InitializeStatusShell();
|
InitializeStatusShell();
|
||||||
InitializeCVars();
|
InitializeCVars();
|
||||||
@@ -91,6 +95,7 @@ namespace Content.Server.GameTicking
|
|||||||
[Dependency] private readonly IWatchdogApi _watchdogApi = default!;
|
[Dependency] private readonly IWatchdogApi _watchdogApi = default!;
|
||||||
[Dependency] private readonly IGameMapManager _gameMapManager = default!;
|
[Dependency] private readonly IGameMapManager _gameMapManager = default!;
|
||||||
[Dependency] private readonly IServerDbManager _db = default!;
|
[Dependency] private readonly IServerDbManager _db = default!;
|
||||||
|
[Dependency] private readonly ILogManager _logManager = default!;
|
||||||
#if EXCEPTION_TOLERANCE
|
#if EXCEPTION_TOLERANCE
|
||||||
[Dependency] private readonly IRuntimeLog _runtimeLog = default!;
|
[Dependency] private readonly IRuntimeLog _runtimeLog = default!;
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
Reference in New Issue
Block a user