License: running server keeps running until the next restart

The configurable LicenseGraceHours setting is gone. If the master is down or
rejects the key, a running server now only warns and keeps running until the
next restart; a (re)start still works up to 72 h after the last confirmation.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-10-01 20:45:38 +02:00
co-authored by Claude Opus 5.5
parent 816c538705
commit 1a2431db3a
9 changed files with 23 additions and 57 deletions
+2 -10
View File
@@ -171,14 +171,6 @@ public sealed class ServerHost
Server = null;
if (server.ExitRequested) break;
if (server.LicenseStopReason != null)
{
// Lizenz zu lange nicht bestätigt: regelmäßig neu versuchen - startet von selbst, sobald der Master wieder bestätigt
SetState(HostState.Error, server.LicenseStopReason);
startRequested = true;
startAt = DateTime.UtcNow + LicenseRetryDelay;
continue;
}
if (server.RestartRequested)
{
GameServer.Log("Restarting the server ...");
@@ -269,14 +261,14 @@ public sealed class ServerHost
else
{
// Master nicht erreichbar oder lehnt ab: mit der letzten Bestätigung starten, solange sie frisch genug ist
var grace = TimeSpan.FromHours(Math.Clamp(Config.LicenseGraceHours, 1, 24 * 30));
var grace = LicenseCache.Grace;
var cached = LicenseCache.Load(dataDir, Config.LicenseKey);
string problem = key.Unreachable ? $"Master server not reachable ({key.Error})" : "License key rejected: " + (key.Error ?? "unknown key");
if (cached != null && DateTime.UtcNow - cached.LastConfirmedUtc < grace)
{
var left = grace - (DateTime.UtcNow - cached.LastConfirmedUtc);
GameServer.Log($"WARNING: {problem} - starting with the license confirmed {LicenseCache.Span(DateTime.UtcNow - cached.LastConfirmedUtc)} ago " +
$"(owner {cached.Owner}). The server keeps running for {LicenseCache.Span(left)} unless the master confirms it again.");
$"(owner {cached.Owner}). The server keeps running until the next restart; a restart works for {LicenseCache.Span(left)} more.");
owner = cached.Owner ?? "?";
confirmed = cached.LastConfirmedUtc;
}