AloxGUI/serial_websocket_handler.gd

61 lines
1.3 KiB
GDScript

extends Node
@export var websocket_url = "ws://localhost:8080/ws"
var socket = WebSocketPeer.new()
var messageBuffer = []
func _ready() -> void:
set_process(false)
pass
func _process(_delta: float) -> void:
socket.poll()
if socket.get_ready_state() != socket.STATE_OPEN:
print("Socket closed?")
set_process(false)
return
while socket.get_available_packet_count():
messageBuffer.append(socket.get_packet().get_string_from_utf8())
func message_pending() -> bool:
return !messageBuffer.is_empty()
func get_message() -> String:
if messageBuffer.is_empty():
return ""
var mess = messageBuffer.pop_front()
return String(mess)
func connectSocket() -> void:
socket.poll()
if socket.get_ready_state() == socket.STATE_OPEN:
print("socket already connected")
return
var err = socket.connect_to_url(websocket_url)
if err != OK:
print("Unable to Connect")
set_process(false)
else:
while (socket.get_ready_state() != socket.STATE_OPEN):
socket.poll()
set_process(true)
func writeSocket(text: String) -> void:
if socket.get_ready_state() != socket.STATE_OPEN:
print("Socket closed?")
set_process(false)
return
var err = socket.send_text(text)
if err != OK:
print("Error sending message: ", err)
set_process(false)
func disconnectSocket() -> void:
socket.close()
func _exit_tree() -> void:
disconnectSocket()