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