diff options
Diffstat (limited to 'network/websocket_client.gd')
| -rw-r--r-- | network/websocket_client.gd | 33 |
1 files changed, 21 insertions, 12 deletions
diff --git a/network/websocket_client.gd b/network/websocket_client.gd index 4583dc3..d10f518 100644 --- a/network/websocket_client.gd +++ b/network/websocket_client.gd @@ -5,6 +5,7 @@ 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 +var message_queue : Array = [] # messages to be sent upon connection func _ready(): socket_client = WebSocketClient.new() @@ -15,6 +16,7 @@ func _ready(): 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 @@ -30,7 +32,12 @@ func sock_close(code = 1000, reason = ""): 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.") @@ -45,29 +52,31 @@ func on_connection_error(): # 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(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: return -1 + if state != 2: + message_queue.push_back(JSON.print(message).to_utf8()) + 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) + if string_to_json: + var json = JSON.parse(message) + if json.error: + return null + message = json.result return message return bytes2var(packet) |
