online multiplayer chess game (note server currently down)
Diffstat (limited to 'networking/PacketHandler.gd')
| -rw-r--r-- | networking/PacketHandler.gd | 66 |
1 files changed, 50 insertions, 16 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 |