diff --git a/project/project.godot b/project/project.godot index 3cb0eff..58df59f 100644 --- a/project/project.godot +++ b/project/project.godot @@ -11,5 +11,6 @@ config_version=5 [application] config/name="Multiplayer Game Test" +run/main_scene="res://scenes/ui/testinterface.tscn" config/features=PackedStringArray("4.2", "Forward Plus") config/icon="res://icon.svg" diff --git a/project/scenes/ui/testinterface.tscn b/project/scenes/ui/testinterface.tscn new file mode 100644 index 0000000..c8000f1 --- /dev/null +++ b/project/scenes/ui/testinterface.tscn @@ -0,0 +1,29 @@ +[gd_scene load_steps=2 format=3 uid="uid://bsno04jv8uvxe"] + +[ext_resource type="Script" path="res://scripts/ui/testinterface.gd" id="1_g1tlq"] + +[node name="TestInterface" type="Control"] +layout_mode = 3 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +script = ExtResource("1_g1tlq") + +[node name="Button" type="Button" parent="."] +layout_mode = 1 +anchors_preset = 8 +anchor_left = 0.5 +anchor_top = 0.5 +anchor_right = 0.5 +anchor_bottom = 0.5 +offset_left = -108.5 +offset_top = -56.0 +offset_right = 108.5 +offset_bottom = 56.0 +grow_horizontal = 2 +grow_vertical = 2 +text = "Test websocket" + +[connection signal="pressed" from="Button" to="." method="_on_button_pressed"] diff --git a/project/scripts/ui/testinterface.gd b/project/scripts/ui/testinterface.gd new file mode 100644 index 0000000..5dbbedb --- /dev/null +++ b/project/scripts/ui/testinterface.gd @@ -0,0 +1,42 @@ +extends Control + +var websocket_url = "wss://acecore.lol:4477/ws" +var websocket_peer = WebSocketPeer.new() + +var payload: Dictionary = { + "type": "broadcast", + "msg": "TESTBUTTON_PRESSED" +} + +func _ready(): + var error = websocket_peer.connect_to_url(websocket_url) + if error == OK: + print("Connected to WebSocket server") + send_message("Connected client") + else: + print("Failed to connect to WebSocket server") + +func _process(_delta): + websocket_peer.poll() + var state = websocket_peer.get_ready_state() + if state == WebSocketPeer.STATE_OPEN: + while websocket_peer.get_available_packet_count(): + print("Packet: ", websocket_peer.get_packet().get_string_from_utf8()) + elif state == WebSocketPeer.STATE_CLOSING: + # Keep polling to achieve proper close. + pass + elif state == WebSocketPeer.STATE_CLOSED: + var code = websocket_peer.get_close_code() + var reason = websocket_peer.get_close_reason() + print("WebSocket closed with code: %d, reason %s. Clean: %s" % [code, reason, code != -1]) + set_process(false) + +func send_message(message: String) -> void: + var state = websocket_peer.get_ready_state() + if state == WebSocketPeer.STATE_OPEN: + websocket_peer.send(str(payload).to_utf8_buffer()) + else: + print("WebSocket connection is not open. Current state: ", state) + +func _on_button_pressed(): + send_message("Test button pressed")