1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
|
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()
|