online multiplayer chess game (note server currently down)
Diffstat (limited to 'networking/Network.gd')
| -rw-r--r-- | networking/Network.gd | 47 |
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 |