online multiplayer chess game (note server currently down)
meaningfull errors: complements https://github.com/bend-n/gd-chess-server/commit/ca2f597
| -rw-r--r-- | networking/PacketHandler.gd | 66 | ||||
| -rw-r--r-- | ui/menus/account/Account.gd | 24 |
2 files changed, 64 insertions, 26 deletions
diff --git a/networking/PacketHandler.gd b/networking/PacketHandler.gd index d9760bd..5a950e3 100644 --- a/networking/PacketHandler.gd +++ b/networking/PacketHandler.gd @@ -16,6 +16,7 @@ signal rematch_result(what) signal signinresult(what) signal signupresult(what) +const DEFAULT_ERROR_MESSAGE = "Error. Please report this issue to bendn." const HEADERS := { "joinrequest": "J", "hostrequest": "H", @@ -98,16 +99,7 @@ func _data_recieved() -> void: yield(get_tree().create_timer(.5), "timeout") emit_signal("info_recieved", text) HEADERS.spectate: - # handle spectate here - if typeof(text) == TYPE_STRING: # ew error - set_lobby_status(text, false) - lobby.set_buttons(true) - return - Globals.spectating = true - _start_game() - yield(get_tree().create_timer(.5), "timeout") - Globals.grid.load_pgn(text.pgn) - emit_signal("info_recieved", text) + spectate_result(text) HEADERS.loadpgn: emit_signal("load_pgn", text) HEADERS.signal: @@ -143,22 +135,53 @@ func _connection_error() -> void: go_back("Connection error, please check your internet, and reload the game.", false) +const join_err_table := { + "FULL": "This game is full. Double check your spelling, or host your own game..", + "NOT_EXIST": "This game does not exist. Double check your spelling, or host it.", + "NO_GAMECODE": "Your game name is empty.", + "NO_ID": "Your id is undefined. Please report this issue to bendn." +} + + func join_result(accepted) -> void: - handle_result(accepted, "Joined!") + handle_result(accepted, "Joined!", join_err_table) + + +const host_err_table := { + "ALREADY_EXISTS": "This game name is taken. Pick a new name.", # game is full + "ALREADY_EXISTS_EMPTY": "This game name is taken. Pick a new name, or join.", # someone else hosted, but noone is joining them :( + "NO_GAMECODE": "Your game name is empty.", + "NO_ID": "Your id is undefined. Please report this issue to bendn." +} func host_result(accepted) -> void: - set_hosting(handle_result(accepted, "Hosted!")) + set_hosting(handle_result(accepted, "Hosted!", host_err_table)) -func handle_result(accepted, resultstring: String) -> bool: - emit_signal("request_result", false if typeof(accepted) != TYPE_DICTIONARY else true) - if typeof(accepted) == TYPE_DICTIONARY: +const spectate_err_table := {"NOT_EXIST": "This game does not exist. Double check your spelling, or host it."} + + +func spectate_result(accepted) -> void: + if handle_result(accepted, "Watching", spectate_err_table, true): + Globals.spectating = true + _start_game() + yield(get_tree().create_timer(.5), "timeout") + Globals.grid.load_pgn(accepted.pgn) + emit_signal("info_recieved", accepted) + + +func handle_result(accepted, resultstring: String, err_table: Dictionary, quick_return := false) -> bool: + var err = accepted.get("err", false) + emit_signal("request_result", false if err else true) + if !err: + if quick_return: + return true Globals.team = "w" if accepted.idx == 0 else "b" Log.debug("Team set to " + Utils.expand_color(Globals.team)) set_lobby_status(resultstring, true) return true - set_lobby_status(accepted, false) + set_lobby_status(err_table.get(err, "Error. Please report this issue to bendn."), false) lobby.set_buttons(true) return false @@ -267,3 +290,14 @@ func relay_signal(body: Dictionary, header: String) -> Dictionary: # its really func send_mov(mov: String) -> void: send_gamecode_packet({move = mov}, HEADERS.move) + + +static func construct_errstr(packet, err_table, default_message := DEFAULT_ERROR_MESSAGE) -> String: + var errstr: String = "" + var err: String = packet.get("err", false) + if err: + errstr = err_table.get(err, default_message) + var stack = packet.get("stack", false) + if stack: + errstr += " (Stack trace: %s) " % stack + return errstr diff --git a/ui/menus/account/Account.gd b/ui/menus/account/Account.gd index 62c1e37..f76df91 100644 --- a/ui/menus/account/Account.gd +++ b/ui/menus/account/Account.gd @@ -41,14 +41,16 @@ func signin(): PacketHandler.signin(Creds.data) -func _on_signin_result(result): - var status_set = !autologin +func _on_signin_result(result: Dictionary) -> void: + var status_set = not autologin # not a autologin if autologin: autologin = false - yield(get_tree().create_timer(.5), "timeout") + yield(get_tree().create_timer(.25), "timeout") $choose/signin/signinbutton.disabled = false - if typeof(result) == TYPE_STRING: # ew, error, get it away from me - return reset(result, status_set) + var err = result.get("err", false) + if err: + var err_table := {"INVALID_DATA": "Username/password incorrect."} + return reset(PacketHandler.construct_errstr(result, err_table) if status_set else "", status_set) Creds.data.uuid = result.id # server uses `id` instead of `uuid`... Creds.data.country = result.country on_successful() @@ -61,15 +63,17 @@ func signup(): PacketHandler.signup(Creds.data) -func _on_signup_result(result: String): +func _on_signup_result(result: Dictionary): $choose/signup/signupbutton.disabled = false - if "err:" in result: # ew error go awway - return reset(result) - Creds.data.uuid = result + var err = result.get("err", false) + if err: + var err_table = {"ALREADY_EXISTS": "That user already exists. Pick a different username."} + return reset(PacketHandler.construct_errstr(result, err_table)) + Creds.data.uuid = result.id on_successful() -func reset(reason: String, reset_creds := true): +func reset(reason: String, reset_creds := true) -> void: if reason: status.set_text(reason, 5) if reset_creds: |