online multiplayer chess game (note server currently down)
Diffstat (limited to 'networking/Network.gd')
-rw-r--r--networking/Network.gd59
1 files changed, 31 insertions, 28 deletions
diff --git a/networking/Network.gd b/networking/Network.gd
index e6fb242..7ac4590 100644
--- a/networking/Network.gd
+++ b/networking/Network.gd
@@ -7,24 +7,24 @@ var game_code := ""
var connected := false
const HEADERS := {
- "move": "M",
"joinrequest": "J",
"hostrequest": "H",
"stopgame": "K",
"ping": "P",
- "startgame": "S",
- "request": "R"
+ "relay": "R", # relay goes to both
+ "signal": "S", # signal is one way
}
-const MOVEHEADERS := {
- "take": "K",
+const MOVEHEADERS := { # subheaders for HEADERS.move
"move": "M",
+ "take": "K",
"castle": "C",
"passant": "P",
"promote": "Q",
}
-const REQUESTHEADERS := {"takeback": "T", "draw": "D", "resign": "R"} # not really a request, but...
+const RELAYHEADERS := {"chat": "C", "startgame": "S"}
+const SIGNALHEADERS := {"takeback": "T", "draw": "D", "resign": "R"} # subheaders for HEADERS.signal
var notation := ""
@@ -33,9 +33,8 @@ 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
+signal signal_recieved(what)
const url := "wss://gd-chess-server.herokuapp.com/"
@@ -80,45 +79,49 @@ 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 signal(body, header: String, keyname := "body", _mainheader := HEADERS.signal) -> Dictionary:
+ var data := {"type": header, "gamecode": game_code, keyname: body}
+ send_packet(data, _mainheader)
+ Log.debug("sending signal %s of type %s" % [body, header])
+ return data
-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 relay_signal(body, header: String, keyname := "body") -> Dictionary: # its really the same thing as signal()
+ return signal(body, header, keyname, HEADERS.relay)
-func send_move_packet(positions, header: String) -> void:
- var packet := {"movetype": header, "gamecode": game_code, "positions": positions}
- Log.debug("sending move packet: %s" % packet)
- send_packet(packet, HEADERS.move) # your move will wait till the server relays back :>
+func stopgame(reason: String) -> void:
+ var packet := {"reason": reason, "gamecode": game_code}
+ send_packet(packet, HEADERS.stopgame)
func _data_recieved() -> void:
var recieve: Dictionary = ws.get_peer(1).get_var()
var header: String = recieve.header
var text = recieve.data
+ if header != HEADERS.ping:
+ Log.debug("recieved %s of header %s" % [text, header])
match header:
HEADERS.hostrequest:
emit_signal("host_result", text)
- HEADERS.move:
- emit_signal("move_data", text)
+ HEADERS.relay:
+ var relay: Dictionary = text
+ if relay.type in MOVEHEADERS.values():
+ emit_signal("move_data", text)
+ else:
+ match relay.type:
+ RELAYHEADERS.startgame:
+ print("Start")
+ emit_signal("start_game")
HEADERS.joinrequest:
emit_signal("join_result", text)
HEADERS.stopgame:
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.signal:
+ var signal: Dictionary = text
+ emit_signal("signal_recieved", signal)
HEADERS.ping:
pass
_: