From 04c03ef6b6a23ad5f73c338af8c024ffa4084172 Mon Sep 17 00:00:00 2001 From: vaporvee Date: Wed, 17 Apr 2024 16:48:11 +0200 Subject: [PATCH] basic udp client --- project/project.godot | 4 +++ project/scenes/ui/tesC03.tmp | 29 +++++++++++++++++ project/scripts/autoload/udp_client.gd | 45 ++++++++++++++++++++++++++ project/scripts/ui/testinterface.gd | 42 ++---------------------- 4 files changed, 80 insertions(+), 40 deletions(-) create mode 100644 project/scenes/ui/tesC03.tmp create mode 100644 project/scripts/autoload/udp_client.gd diff --git a/project/project.godot b/project/project.godot index 58df59f..8fa960c 100644 --- a/project/project.godot +++ b/project/project.godot @@ -14,3 +14,7 @@ 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" + +[autoload] + +UdpClient="*res://scripts/autoload/udp_client.gd" diff --git a/project/scenes/ui/tesC03.tmp b/project/scenes/ui/tesC03.tmp new file mode 100644 index 0000000..c8000f1 --- /dev/null +++ b/project/scenes/ui/tesC03.tmp @@ -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/autoload/udp_client.gd b/project/scripts/autoload/udp_client.gd new file mode 100644 index 0000000..707dc95 --- /dev/null +++ b/project/scripts/autoload/udp_client.gd @@ -0,0 +1,45 @@ +extends Node + +var udp_peer: PacketPeerUDP = PacketPeerUDP.new() +var server_ip: String = "45.93.249.177" # Replace with your server's IP +var server_port: int = 4477 # Replace with your server's port + +func _ready(): + var err = udp_peer.bind(server_port, "*") + if err != OK: + print("Failed to bind to port: ", server_port) + return + print("Listening on port: ", server_port) + # Send a message to the server to initiate session ID assignment + var payload: Dictionary = { + "type": "init", + } + send_payload(payload) + +func _process(_delta): + if udp_peer.get_available_packet_count() > 0: + var packet = udp_peer.get_packet() + var message: String = packet.get_string_from_utf8() + print("Received: ", message) + +func send_message(message: String) -> void: + var payload: Dictionary = { + "type": "message", + "msg": message + } + send_payload(payload) + +func send_payload(payload: Dictionary): + var packet = JSON.stringify(payload).to_utf8_buffer() + udp_peer.set_dest_address(server_ip, server_port) + udp_peer.put_packet(packet) + +func move(vec: Vector2i): + var payload: Dictionary = { + "type": "move", + "direction": { + "x": vec.x, + "y": vec.y + } + } + send_payload(payload) diff --git a/project/scripts/ui/testinterface.gd b/project/scripts/ui/testinterface.gd index 5dbbedb..229a2ec 100644 --- a/project/scripts/ui/testinterface.gd +++ b/project/scripts/ui/testinterface.gd @@ -1,42 +1,4 @@ -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) +extends Node func _on_button_pressed(): - send_message("Test button pressed") + UdpClient.send_message("TEST BUTTON PRESSED")