online multiplayer chess game (note server currently down)
Diffstat (limited to 'networking/Network.gd')
-rw-r--r--networking/Network.gd49
1 files changed, 34 insertions, 15 deletions
diff --git a/networking/Network.gd b/networking/Network.gd
index d5d845e..e6fb242 100644
--- a/networking/Network.gd
+++ b/networking/Network.gd
@@ -4,7 +4,7 @@ class_name Network
var ws := WebSocketClient.new()
var game_code := ""
-var connected = false
+var connected := false
const HEADERS := {
"move": "M",
@@ -13,6 +13,7 @@ const HEADERS := {
"stopgame": "K",
"ping": "P",
"startgame": "S",
+ "request": "R"
}
const MOVEHEADERS := {
@@ -23,6 +24,8 @@ const MOVEHEADERS := {
"promote": "Q",
}
+const REQUESTHEADERS := {"takeback": "T", "draw": "D", "resign": "R"} # not really a request, but...
+
var notation := ""
signal start_game
@@ -30,19 +33,21 @@ signal move_data(data)
signal host_result(result)
signal join_result(result)
signal game_over(problem, isok)
+signal request_result(result)
+signal request(request)
signal connection_established
const url := "wss://gd-chess-server.herokuapp.com/"
func _ready() -> void:
+ yield(get_tree(), "idle_frame") # wait a frame
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.debug("Connecting to server %s..." % url)
ws.connect_to_url(url)
- var t = Timer.new()
+ var t := Timer.new()
add_child(t)
t.wait_time = 1
t.start(1)
@@ -53,14 +58,14 @@ func ping() -> void:
send_packet("ping", HEADERS.ping)
-func close():
+func close() -> void:
ws.disconnect_from_host(0, "Close")
func _connection_established(_protocol) -> void:
connected = true
emit_signal("connection_established")
- Log.info("Connection established")
+ Log.debug("Connected to server %s..." % url)
func _connection_closed(_was_clean_closed) -> void:
@@ -75,12 +80,19 @@ func _connection_error() -> void:
emit_signal("game_over", "Connection error", false)
+func send_request_answer_packet(request_type: String, answer: bool) -> void:
+ var data := {"answering": true, "type": request_type, "gamecode": game_code, "answer": answer}
+ send_packet(data, HEADERS.request)
+
+
+func send_request_packet(request_type: String, prompt: String) -> void:
+ var data := {"answering": false, "type": request_type, "gamecode": game_code, "question": prompt}
+ send_packet(data, HEADERS.request)
+
+
func send_move_packet(positions, header: String) -> void:
var packet := {"movetype": header, "gamecode": game_code, "positions": positions}
- Globals.add_turn()
- var globals = Globals.pack_vars()
- for variable in globals:
- packet[variable] = globals[variable]
+ Log.debug("sending move packet: %s" % packet)
send_packet(packet, HEADERS.move) # your move will wait till the server relays back :>
@@ -96,18 +108,25 @@ func _data_recieved() -> void:
HEADERS.joinrequest:
emit_signal("join_result", text)
HEADERS.stopgame:
- if PacketHandler.leaving:
- PacketHandler.leaving = false
- else: # dont emit the signal if its a stophost thing (HACK)
- emit_signal("game_over", "your opponent requested stop", true)
+ if !PacketHandler.leaving: # dont emit the signal if its a stophost thing (HACK)
+ emit_signal("game_over", text, true)
+ PacketHandler.leaving = false
HEADERS.startgame:
emit_signal("start_game")
+ PacketHandler.emit_signal("set_visible", false)
+ HEADERS.request:
+ if text.answering:
+ emit_signal("request_result", text)
+ else:
+ emit_signal("request", text)
HEADERS.ping:
pass
+ _:
+ Log.err("unknown header %s" % header)
-func _process(_delta) -> void:
- var wsstatus = ws.get_connection_status()
+func _process(_delta: float) -> void:
+ var wsstatus := ws.get_connection_status()
if wsstatus == ws.CONNECTION_CONNECTING or wsstatus == ws.CONNECTION_CONNECTED:
ws.poll()