summaryrefslogtreecommitdiff
path: root/network/websocket_client.gd
diff options
context:
space:
mode:
Diffstat (limited to 'network/websocket_client.gd')
-rw-r--r--network/websocket_client.gd33
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)