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 id 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) 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) state = 2 # CONNECTED 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_string=false): if state != 2: return null if as_string: socket.set_write_mode(WebSocketPeer.WRITE_MODE_TEXT) return socket.put_packet(message) else: socket.set_write_mode(WebSocketPeer.WRITE_MODE_BINARY) return socket.put_packet(var2bytes(message)) func send_json(message) -> int: if state != 2: return -1 var message_json = JSON.print(message).to_utf8() socket.set_write_mode(WebSocketPeer.WRITE_MODE_TEXT) 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 print("receive") var packet : PoolByteArray = socket.get_packet() if socket.was_string_packet(): var message = packet.get_string_from_utf8() if string_to_json: message = JSON.parse(message) return message return bytes2var(packet) func _process(_delta): socket_client.poll()