feat: enforce allocated join roster admission

This commit is contained in:
Josh Creek
2026-09-01 08:39:56 +01:00
parent d8ea2f4ac7
commit 68d832f7bc
6 changed files with 85 additions and 2 deletions
+15
View File
@@ -1,5 +1,7 @@
extends Node
const NetCodec = preload("res://scripts/net_codec.gd")
# Headless dedicated server entry point (task 1.6). Parses CLI args, hosts
# via NetworkManager, logs structured lines, and watches for physics-tick
# overrun (§9 gotcha 9: Engine.max_physics_steps_per_frame defaults to 8;
@@ -60,6 +62,19 @@ func _ready() -> void:
printerr("cosmic-clash-server: allocated transport '%s' is not supported by this build" % assigned_transport)
get_tree().quit(1)
return
if allocated_mode:
var roster_file := String(config.get_value("join-authorisations-file"))
var roster_json := FileAccess.get_file_as_string(roster_file)
var roster_tokens = JSON.parse_string(roster_json)
if not roster_tokens is Array or roster_tokens.is_empty() or not MatchNet.configure_join_authorisations(roster_tokens, {
"match_id": String(config.get_value("match-id")),
"server_id": String(config.get_value("server-id")),
"protocol": str(NetCodec.PROTOCOL_VERSION),
"protocol_version": NetCodec.PROTOCOL_VERSION,
}):
printerr("cosmic-clash-server: refusing to start with invalid join-authorisations-file")
get_tree().quit(1)
return
NetworkManager.client_connected.connect(_on_client_connected)
NetworkManager.client_disconnected.connect(_on_client_disconnected)