extends Node
class_name Network
var ws = WebSocketClient.new()
var timer = Timer.new()
signal recieved(data)
signal connected
signal err(err)
const HEADERS = {"chat": "C", "ping": "P"}
func _ready():
add_child(timer)
timer.start(5)
timer.connect("timeout", self, "ping")
ws.connect("connection_established", self, "_connection_established")
ws.connect("connection_closed", self, "_connection_closed")
ws.connect("connection_error", self, "_connection_error")
ws.connect("data_received", self, "_data_recieved")
ws.connect("connection_failed", self, "connectwebsocket")
connectwebsocket()
func connectwebsocket():
var url = "wss://chat-server-gd.herokuapp.com/"
print("Connecting to " + url)
ws.connect_to_url(url)
func ping():
send_packet({"header": "P"})
func _connection_established(protocol):
print("Connection established ", protocol)
emit_signal("connected")
func _connection_closed(_err):
emit_signal("err", "Connection closed")
func _connection_error():
emit_signal("err", "Connection error")
func _data_recieved():
var text = ws.get_peer(1).get_var()
if text.header == HEADERS.chat:
emit_signal("recieved", text)
print("recieved %s" % text.text)
func _process(_delta):
if (
ws.get_connection_status() == ws.CONNECTION_CONNECTING
|| ws.get_connection_status() == ws.CONNECTION_CONNECTED
):
ws.poll()
func send_packet(variant):
if ws.get_peer(1).is_connected_to_host() and variant.header:
ws.get_peer(1).put_var(variant)