43 lines
1 KiB
GDScript3
43 lines
1 KiB
GDScript3
|
extends Channel
|
||
|
|
||
|
signal on_channel_token_received(msg: ProvidedConnectionTokenMessage)
|
||
|
|
||
|
var queue: Array[Message.Channels]
|
||
|
|
||
|
|
||
|
func get_channel_location() -> String:
|
||
|
return "connection"
|
||
|
|
||
|
|
||
|
func connect_to_channel(token: String) -> void:
|
||
|
if self.socket.get_ready_state() != WebSocketPeer.STATE_CLOSED:
|
||
|
return
|
||
|
self.connect_socket(token)
|
||
|
|
||
|
|
||
|
func request_channel_token(channel: Message.Channels) -> void:
|
||
|
if not queue.has(channel):
|
||
|
queue.push_back(channel)
|
||
|
|
||
|
|
||
|
func _process(_delta: float) -> void:
|
||
|
self.socket.poll()
|
||
|
if self.socket.get_ready_state() != WebSocketPeer.STATE_OPEN:
|
||
|
return
|
||
|
for i in queue.size():
|
||
|
var msg := RequestConnectionTokenMessage.new()
|
||
|
msg.channel = queue[i]
|
||
|
self.socket.send_text(Message.serialize(msg))
|
||
|
queue.remove_at(i)
|
||
|
while self.socket.get_available_packet_count():
|
||
|
var msg: ProvidedConnectionTokenMessage = (
|
||
|
Message
|
||
|
. deserialize(
|
||
|
self.socket.get_packet().get_string_from_utf8(),
|
||
|
[ProvidedConnectionTokenMessage],
|
||
|
)
|
||
|
)
|
||
|
if msg == null:
|
||
|
continue
|
||
|
on_channel_token_received.emit(msg)
|