online multiplayer chess game (note server currently down)
Diffstat (limited to 'networking/Network.gd')
-rw-r--r--networking/Network.gd47
1 files changed, 32 insertions, 15 deletions
diff --git a/networking/Network.gd b/networking/Network.gd
index aa3f13d..8091cb8 100644
--- a/networking/Network.gd
+++ b/networking/Network.gd
@@ -3,23 +3,20 @@ class_name Network
const url := "wss://gd-chess-server.herokuapp.com/"
-var ws := WebSocketClient.new()
-var connected := false
-
+var ws = WebSocketClient.new()
signal connection_established
-func _ready():
+func _init():
SaveLoad.save_string("user://network_log.log", "") # overwrite last log
+ connect_ws_signals()
-func open() -> void:
- ws.connect_to_url(url)
+func connect_ws_signals():
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")
- Log.net("OPEN NETWORK: " + url)
func close() -> void:
@@ -27,36 +24,56 @@ func close() -> void:
func _connection_established(_protocol) -> void:
- Log.net("CONNECTED TO %s" % url)
+ Log.net("CONNECTED: %s" % url)
emit_signal("connection_established") # bubble the signal up
- connected = true
func _connection_closed(_was_clean_closed) -> void:
- connected = false
- Log.net("DISCONNECTED FROM %s" % url)
+ Log.net("DISCONNECTED: %s" % url)
Log.err("Connection closed")
func _connection_error() -> void:
- connected = false
+ Log.net("DISCONNECTED: %s" % url)
Log.err("Connection error")
- Log.net("DISCONNECTED FROM %s" % url)
func _data_recieved():
pass
+func is_open_connection():
+ return ws.get_connection_status() == ws.CONNECTION_CONNECTED
+
+
+func open_connection(tries := 5, interval := 1.0) -> int:
+ yield(get_tree(), "idle_frame")
+ if is_open_connection():
+ return OK
+ for try in tries + 1:
+ if Utils.request() == OK:
+ var err = ws.connect_to_url(url)
+ if !err:
+ yield(ws, "connection_established")
+ if is_open_connection():
+ return OK
+ else:
+ Log.net("CONNECT: failed(%s)" % err)
+ if try != tries:
+ yield(get_tree().create_timer(interval), "timeout")
+ Log.net("CONNECT: failed")
+ return ERR_CANT_CONNECT
+
+
func _process(_delta: float) -> void:
- var wsstatus := ws.get_connection_status()
+ var wsstatus: int = ws.get_connection_status()
if wsstatus == ws.CONNECTION_CONNECTING or wsstatus == ws.CONNECTION_CONNECTED:
ws.poll()
func send_packet(variant, header: String) -> int:
var pckt = {header = header, data = variant}
- if ws.get_peer(1).is_connected_to_host():
+ if is_open_connection():
ws.get_peer(1).put_var(pckt)
Log.net("SENT: %s" % pckt)
return OK