summaryrefslogtreecommitdiff
path: root/network/GameCoordinatorTester.gd
diff options
context:
space:
mode:
authorAnson Bridges <bridges.anson@gmail.com>2025-08-15 23:04:40 -0700
committerAnson Bridges <bridges.anson@gmail.com>2025-08-15 23:04:40 -0700
commitf087c6a98b1da55525a6e3c1d7c82477f82eb5cd (patch)
tree0e2b517bedb3dd475c2b82a1b05800e5b7593854 /network/GameCoordinatorTester.gd
parentd558a9add0e183219a7a9ff482807bdcd677e21a (diff)
Game Coordinator now mostly (~90%) functional
Diffstat (limited to 'network/GameCoordinatorTester.gd')
-rw-r--r--network/GameCoordinatorTester.gd144
1 files changed, 144 insertions, 0 deletions
diff --git a/network/GameCoordinatorTester.gd b/network/GameCoordinatorTester.gd
new file mode 100644
index 0000000..12f92ab
--- /dev/null
+++ b/network/GameCoordinatorTester.gd
@@ -0,0 +1,144 @@
+extends Control
+
+
+onready var ws_client_template : PackedScene = preload("res://network/WSClient.tscn")
+
+var game_coordinator_url : String = "ws://192.168.7.112:8181"
+
+var gc_client_menus : Dictionary = {}
+var latest_gccid : int = 0
+
+const HOST_JSON_TEMPLATE_STR : String = '{ "lobby_name" : "",\n "game_type" : "test",\n "username" : "",\n "private" : false,\n "password" : "",\n "max_players" : 4 } '
+const JOIN_JSON_TEMPLATE_STR : String = '{ "lobby_id" : "",\n "game_type" : "test",\n "username" : "",\n "password" : "",\n "args": {} }'
+
+func _ready():
+ pass
+
+
+func _process(_delta):
+
+ # read from all open sockets
+ for gccid in gc_client_menus.keys():
+ var gc_client_menu = gc_client_menus[gccid]
+ gc_client_menu["state"].text = str( gc_client_menu["ws_client"].state )
+ if gc_client_menu["ws_client"].state == 2:
+ var recv_message = gc_client_menu["ws_client"].receive(true) # true argument means expect + convert to JSON
+ if recv_message:
+ gc_client_menu["output"].text += str(recv_message) + "\n"
+
+func host_lobby(gccid : int):
+ var gccm = gc_client_menus[gccid]
+ var json_parse_result : JSONParseResult = JSON.parse(gccm["input"].text)
+ if json_parse_result.error:
+ gccm["input"].text = HOST_JSON_TEMPLATE_STR # fill with template for ease if invalid json is provided
+ return
+ else:
+ var message = json_parse_result.result
+ message["type"] = "host_lobby"
+ gccm["ws_client"].sock_connect_to_url(game_coordinator_url)
+ gccm["ws_client"].send_json(message)
+
+func join_lobby(gccid : int):
+ var gccm = gc_client_menus[gccid]
+ var json_parse_result : JSONParseResult = JSON.parse(gccm["input"].text)
+ if json_parse_result.error:
+ gccm["input"].text = JOIN_JSON_TEMPLATE_STR # fill with template for ease if invalid json is provided
+ return
+ else:
+ var message = json_parse_result.result
+ message["type"] = "join_lobby"
+ gccm["ws_client"].sock_connect_to_url(game_coordinator_url)
+ gccm["ws_client"].send_json(message)
+
+func send_message(gccid : int):
+ var gccm = gc_client_menus[gccid]
+ var json_parse_result : JSONParseResult = JSON.parse(gccm["input"].text)
+ if json_parse_result.error:
+ gccm["input"].text = JOIN_JSON_TEMPLATE_STR # fill with template for ease if invalid json is provided
+ return
+ else:
+ var message = json_parse_result.result
+ gccm["ws_client"].send_json(message)
+
+func disconnect_client(gccid : int):
+ var gccm : Dictionary = gc_client_menus[gccid]
+ var disconnect_message = {"type" : "lobby_control", "command" : "disconnect"}
+ gccm["ws_client"].send_json(disconnect_message)
+
+func reset_ws_client(gccid : int):
+ var gccm : Dictionary = gc_client_menus[gccid]
+
+ gccm["ws_client"].queue_free()
+ gccm["ws_client"] = ws_client_template.instance()
+ gccm["menu"].add_child( gccm["ws_client"] )
+
+ gccm["host"].disabled = false
+ gccm["join"].disabled = false
+ gccm["disconnect"].disabled = true
+ gccm["send"].disabled = true
+
+
+func delete_gc_client(gccid : int):
+ var gc_client_menu : Dictionary = gc_client_menus[gccid]
+ gc_client_menu["parent"].queue_free() # remove HBoxContainer and all of its children, which together represent a gc client
+ gc_client_menus.erase(gccid)
+
+func create_gc_client():
+ latest_gccid += 1
+ var new_gc_index : int = latest_gccid
+ # container for all buttons
+ var gc_client_menu : HBoxContainer = HBoxContainer.new()
+
+ var ws_client : Node = ws_client_template.instance()
+ gc_client_menu.add_child(ws_client)
+
+ var delete_button : Button = Button.new()
+ delete_button.text = "X"
+ delete_button.connect("pressed", self, "delete_gc_client", [new_gc_index])
+ gc_client_menu.add_child(delete_button)
+
+ var connection_state : Label = Label.new()
+ connection_state.text = "0"
+ gc_client_menu.add_child(connection_state)
+
+ var input : TextEdit = TextEdit.new()
+ input.rect_min_size = Vector2(400, 100)
+ gc_client_menu.add_child(input)
+
+ var output : TextEdit = TextEdit.new()
+ output.text = "---CONNECTION OUTPUT---\n"
+ output.rect_min_size = Vector2(400, 100)
+ output.readonly = true
+ gc_client_menu.add_child(output)
+
+ var join_btn : Button = Button.new()
+ join_btn.text = "Join"
+ join_btn.connect("pressed", self, "join_lobby", [new_gc_index])
+ gc_client_menu.add_child(join_btn)
+
+ var host_btn : Button = Button.new()
+ host_btn.text = "Host"
+ host_btn.connect("pressed", self, "host_lobby", [new_gc_index])
+ gc_client_menu.add_child(host_btn)
+
+ var send_msg_btn : Button = Button.new()
+ send_msg_btn.text = "Send"
+ #send_msg_btn.disabled = true
+ send_msg_btn.connect("pressed", self, "send_message", [new_gc_index])
+ gc_client_menu.add_child(send_msg_btn)
+
+ var disconnect_btn : Button = Button.new()
+ disconnect_btn.text = "Disconnect"
+ #disconnect_btn.disabled = true
+ disconnect_btn.connect("pressed", self, "disconnect_client", [new_gc_index])
+ gc_client_menu.add_child(disconnect_btn)
+
+ var reset_btn : Button = Button.new()
+ reset_btn.text = "Reset WS"
+ reset_btn.disabled = true
+ reset_btn.connect("pressed", self, "reset_ws_client", [new_gc_index])
+ gc_client_menu.add_child(reset_btn)
+
+ var gc_client : Dictionary = {"parent": gc_client_menu, "state" : connection_state, "ws_client" : ws_client, "join" : join_btn, "host" : host_btn, "send" : send_msg_btn, "disconnect" : disconnect_btn, "reset" : reset_btn, "input" : input, "output" : output}
+ gc_client_menus[new_gc_index] = gc_client
+ add_child(gc_client_menu)