From 255fbf19cc9499ef384d41f68515da5e49e8a3ce Mon Sep 17 00:00:00 2001 From: Anson Bridges Date: Tue, 19 Aug 2025 12:38:02 -0700 Subject: added menus, reworking GC client architecture --- network/websocket_client_basic.gd | 84 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 84 insertions(+) create mode 100644 network/websocket_client_basic.gd (limited to 'network/websocket_client_basic.gd') diff --git a/network/websocket_client_basic.gd b/network/websocket_client_basic.gd new file mode 100644 index 0000000..353dd81 --- /dev/null +++ b/network/websocket_client_basic.gd @@ -0,0 +1,84 @@ +extends Node + +var socket_client: WebSocketClient = null +var socket: WebSocketPeer = null +var state: int = 0 # -1 = CONNECTION_FAILED, 0 = CONNECTION_DISCONNECTED, 1 = CONNECTION_CONNECTING, 2 = CONNECTION_CONNECTED, 3 = CONNECTION_DISCONNECTING + +var message_queue : Array = [] # messages to be sent upon connection + +func _ready(): + socket_client = WebSocketClient.new() + socket_client.connect("connection_established", self, "on_connection_success") + socket_client.connect("connection_closed", self, "on_connection_close_success") + socket_client.connect("connection_error", self, "on_connection_error") + #socket_client.connect("data_received", self, "receive") + +func sock_connect_to_url(url): + print("Connecting to %s..." % url) + message_queue.clear() + var error = socket_client.connect_to_url(url) + if error != OK: + return error + + state = 1 # CONNECTING + return OK + +func sock_close(code = 1000, reason = ""): + print("Closing websocket...") + socket_client.disconnect_from_host(code, reason) + state = 3 # DISCONNECTING + +func on_connection_success(protocol): + print("WebSocket connection success with protocol %s." % protocol) + socket = socket_client.get_peer(1) + socket.set_write_mode(WebSocketPeer.WRITE_MODE_TEXT) # defaults to text mode + state = 2 # CONNECTED + + while len(message_queue) > 0: + var msg = message_queue.pop_at(0) + send(msg) + +func on_connection_close_success(clean): + print("WebSocket closed successfully.") + socket = null + if clean: + state = 0 # DISCONNECTED + else: + state = -1 # DISCONNECT DIRTY + +func on_connection_error(): # connection failed + print("WebSocket connection failed!") + socket = null + state = -1 # DISCONNECT DIRTY + +func send(message, as_bytes=false) -> int: + if state != 2: + message_queue.push_back(message) + return -1 + return socket.put_packet(message) + + +func send_json(message) -> int: + if state != 2: + message_queue.push_back(JSON.print(message).to_utf8()) + return -1 + var message_json = JSON.print(message).to_utf8() + return socket.put_packet(message_json) + +func receive(string_to_json=false): + if state != 2: return null + if socket.get_available_packet_count() < 1: return null + var packet : PoolByteArray = socket.get_packet() + if socket.was_string_packet(): + var message = packet.get_string_from_utf8() + if string_to_json: + var json = JSON.parse(message) + if json.error: + return null + message = json.result + return message + return bytes2var(packet) + + +func _process(_delta): + socket_client.poll() -- cgit v1.2.3