Server 2.10.5: far fewer save freezes
Saving makes the game of the asked player freeze for seconds. Joining now asks for a fresh save only if the stored one is older than JoinSaveMaxAgeMinutes (15) and something changed - otherwise the stored save plus the world state; regular saves every 30 minutes (old untouched default 10 is migrated once) and marked not urgent, so the game can wait for a calm moment (60 s deadline). 3 new tests (168). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
+19
-3
@@ -28,9 +28,18 @@ public sealed class ServerConfig
|
||||
public int AutosaveSeconds { get; set; } = 60;
|
||||
/// <summary>
|
||||
/// So oft (Minuten) lässt sich der Server von einem Spieler im Spiel den aktuellen Spielstand hochladen
|
||||
/// (Schrauben, Teile, alles wie im Spiel gespeichert). Zusätzlich immer, wenn jemand beitritt. 0 = nur beim Beitreten.
|
||||
/// (Schrauben, Teile, alles wie im Spiel gespeichert). Speichern lässt das Spiel dieses Spielers einige Sekunden
|
||||
/// hängen - deshalb nicht zu oft. 0 = nur beim Beitreten.
|
||||
/// </summary>
|
||||
public int SaveSyncMinutes { get; set; } = 10;
|
||||
public int SaveSyncMinutes { get; set; } = 30;
|
||||
/// <summary>
|
||||
/// Beim Beitreten nur dann frisch speichern lassen, wenn der letzte Spielstand älter ist (Minuten) - sonst bekommt der
|
||||
/// Neue den gespeicherten Stand und die seitdem passierten Änderungen. 0 = bei jedem Beitritt frisch speichern.
|
||||
/// </summary>
|
||||
public int JoinSaveMaxAgeMinutes { get; set; } = 15;
|
||||
/// <summary>Version der Einstellungen (für einmalige Anpassungen alter server.json).</summary>
|
||||
public int ConfigVersion { get; set; } = 0;
|
||||
public const int CurrentConfigVersion = 2;
|
||||
/// <summary>Optional: Steam Web API Key, um Steam-Tickets der Spieler bei Steam zu prüfen.</summary>
|
||||
public string SteamWebApiKey { get; set; } = "";
|
||||
/// <summary>Gesperrte SteamID64s.</summary>
|
||||
@@ -72,11 +81,18 @@ public sealed class ServerConfig
|
||||
created = !File.Exists(path);
|
||||
if (created)
|
||||
{
|
||||
var fresh = new ServerConfig();
|
||||
var fresh = new ServerConfig { ConfigVersion = CurrentConfigVersion };
|
||||
fresh.Save(path);
|
||||
return fresh;
|
||||
}
|
||||
var config = JsonSerializer.Deserialize<ServerConfig>(File.ReadAllText(path), Options) ?? new ServerConfig();
|
||||
if (config.ConfigVersion < 2)
|
||||
{
|
||||
// Früherer Standard: alle 10 Minuten speichern lassen - das ließ einen Spieler alle 10 Minuten einige Sekunden
|
||||
// hängen. Wer den Standard nie geändert hat, bekommt den neuen (30).
|
||||
if (config.SaveSyncMinutes == 10) config.SaveSyncMinutes = 30;
|
||||
config.ConfigVersion = CurrentConfigVersion;
|
||||
}
|
||||
// Neue Einstellungen (z.B. Admins) auch in ältere server.json schreiben, damit man sie sieht
|
||||
try { config.Save(path); } catch (Exception) { } // z.B. schreibgeschützt - dann eben nicht
|
||||
return config;
|
||||
|
||||
Reference in New Issue
Block a user