feat: support configurable game server address and port

* Launch game servers in headless mode
* Add configurable game address and port to GameData
* Pass dynamically assigned server ports to clients
* Update lobby defaults for `0.0.0.0:8080`
* Refactor server command-line argument handling
This commit is contained in:
2026-08-10 00:28:23 -05:00
parent 1eb057fefd
commit 7897462309
5 changed files with 30 additions and 7 deletions

View File

@@ -13,7 +13,10 @@ func _wait_for_child(id: String, port: String, mode: String) -> void:
var output := [] var output := []
var exit_code := OS.execute( var exit_code := OS.execute(
"./game.sh", ["--", "server_" + port, "game", mode], "./game.sh",
[
"--headless", "--", "server_" + port, "game", mode
],
output, output,
true true
) )

View File

@@ -1,6 +1,10 @@
class_name GameData extends Node class_name GameData extends Node
var game_address: String = "0.0.0.0"
var game_port: int = 8080
func _init() -> void: func _init() -> void:
Globals.game_data = self Globals.game_data = self

View File

@@ -45,11 +45,15 @@ func _launch_game_server(
var port: String = InstanceLauncher.launch_game_server(match_entry.data.type) var port: String = InstanceLauncher.launch_game_server(match_entry.data.type)
if port == "-1": if port == "-1":
# TODO: Alert clients that the game wont be created due to # TODO: Alert clients that the game wont be created due to
# server reaching number of allowed instances # server reaching number of allowed instances.
return return
Globals.game_data.rpc_id(client1.id, "set_game_address", "127.0.0.1") # TODO: Set address dynamically; I.E. if game on different server than lobby.
Globals.game_data.rpc_id(client2.id, "set_game_address", "127.0.0.1") # As is, clients use the lobby address since games launch on new ports.
# Will have to change how we watch game server death if on diff server.
#Globals.game_data.rpc_id(client1.id, "set_game_address", "51.222.85.126")
#Globals.game_data.rpc_id(client2.id, "set_game_address", "51.222.85.126")
Globals.game_data.rpc_id(client1.id, "set_game_port", port) Globals.game_data.rpc_id(client1.id, "set_game_port", port)
Globals.game_data.rpc_id(client2.id, "set_game_port", port) Globals.game_data.rpc_id(client2.id, "set_game_port", port)

View File

@@ -44,10 +44,10 @@ size_flags_horizontal = 3
[node name="host_address_input" type="LineEdit" parent="body/left_body/server_host_hbox"] [node name="host_address_input" type="LineEdit" parent="body/left_body/server_host_hbox"]
layout_mode = 2 layout_mode = 2
size_flags_horizontal = 3 size_flags_horizontal = 3
text = "127.0.0.1" text = "0.0.0.0"
placeholder_text = "Server Address: (Eg. 0.0.0.0)" placeholder_text = "Server Address: (Eg. 0.0.0.0)"
alignment = 1 alignment = 1
max_length = 12 max_length = 15
emoji_menu_enabled = false emoji_menu_enabled = false
clear_button_enabled = true clear_button_enabled = true
caret_blink = true caret_blink = true
@@ -57,7 +57,7 @@ layout_mode = 2
min_value = 1.0 min_value = 1.0
max_value = 65535.0 max_value = 65535.0
page = 10.0 page = 10.0
value = 31315.0 value = 8080.0
rounded = true rounded = true
alignment = 1 alignment = 1

View File

@@ -22,6 +22,8 @@ func _ready() -> void:
for arg in OS.get_cmdline_user_args(): for arg in OS.get_cmdline_user_args():
if "name_" in arg: if "name_" in arg:
name_(arg) name_(arg)
elif "server_" in arg:
server_(arg)
match arg: match arg:
"server": "server":
@@ -36,6 +38,16 @@ func name_(arg: String) -> void:
var game_name = arg.split("_")[-1] var game_name = arg.split("_")[-1]
self.name = game_name self.name = game_name
func server_(arg: String) -> void:
var host_port = float(arg.split("_")[-1])
Globals.game_state.set_game_scene(
"res://scenes/screens/lobby_screen/lobby.tscn"
)
$scene/lobby_screen.find_child("host_port_range", true, false).set_value_no_signal(host_port)
$scene/lobby_screen.find_child("host_start_bttn", true, false).emit_signal("pressed")
func server(_arg: String) -> void: func server(_arg: String) -> void:
Globals.game_state.set_game_scene( Globals.game_state.set_game_scene(
"res://scenes/screens/lobby_screen/lobby.tscn" "res://scenes/screens/lobby_screen/lobby.tscn"