diff options
| author | Anson Bridges <bridges.anson@gmail.com> | 2025-08-15 23:04:40 -0700 |
|---|---|---|
| committer | Anson Bridges <bridges.anson@gmail.com> | 2025-08-15 23:04:40 -0700 |
| commit | f087c6a98b1da55525a6e3c1d7c82477f82eb5cd (patch) | |
| tree | 0e2b517bedb3dd475c2b82a1b05800e5b7593854 /network/GameCoordinatorTester.gd | |
| parent | d558a9add0e183219a7a9ff482807bdcd677e21a (diff) | |
Game Coordinator now mostly (~90%) functional
Diffstat (limited to 'network/GameCoordinatorTester.gd')
| -rw-r--r-- | network/GameCoordinatorTester.gd | 144 |
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) |
