fix(multiplayer): reconcile authoritative initial connections

This commit is contained in:
Josh Creek
2026-09-03 00:02:04 +01:00
parent 781cbc35aa
commit aa446cfbfe
40 changed files with 809 additions and 87 deletions
+12
View File
@@ -12,6 +12,8 @@ func _init() -> void:
quit(1)
return
control.set_process_ready(true)
control.set_meta("admission_armed", false)
control.initial_connect_ready.connect(func() -> void: control.set_meta("admission_armed", true))
await process_frame
var ready_response := await _request("GET", "/ready", [])
if ready_response != 200:
@@ -23,6 +25,16 @@ func _init() -> void:
printerr("unauthorized drain response was %d" % unauthorized)
quit(1)
return
var unauthorized_admission := await _request("POST", "/initial-connect-ready", ["Authorization: Bearer wrong"])
if unauthorized_admission != 401 or bool(control.get_meta("admission_armed")):
printerr("unauthorized initial-connect response/state was %d/%s" % [unauthorized_admission, control.get_meta("admission_armed")])
quit(1)
return
var admitted := await _request("POST", "/initial-connect-ready", ["Authorization: Bearer drain-secret"])
if admitted != 202 or not bool(control.get_meta("admission_armed")):
printerr("authorized initial-connect response/state was %d/%s" % [admitted, control.get_meta("admission_armed")])
quit(1)
return
var drained := await _request("POST", "/drain", ["Authorization: Bearer drain-secret"])
if drained != 202 or not control.is_draining():
printerr("authorized drain response/state was %d/%s" % [drained, control.is_draining()])