diff options
-rw-r--r-- | public/common/play.js | 9 | ||||
-rw-r--r-- | server.js | 17 |
2 files changed, 21 insertions, 5 deletions
diff --git a/public/common/play.js b/public/common/play.js index cf4bcad..e34f42c 100644 --- a/public/common/play.js +++ b/public/common/play.js @@ -442,6 +442,15 @@ function connect_play() { let arg = msg_data[1] console.log("MESSAGE", cmd) switch (cmd) { + case "warning": + document.getElementById("prompt").textContent = arg + document.querySelector("header").classList.add("disconnected") + setTimeout(() => { + document.querySelector("header").classList.remove("disconnected") + on_update_header() + }, 1000) + break + case "error": document.getElementById("prompt").textContent = arg if (view) { @@ -2211,19 +2211,26 @@ function on_action(socket, action, args, cookie) { else SLOG(socket, "ACTION", action) - if (typeof cookie === "number") // TODO: for backwards compatibility only, remove later! - if (game_cookies[socket.game_id] !== cookie) - return send_message(socket, 'error', "Synchronization error!") - game_cookies[socket.game_id] ++ + if (game_cookies[socket.game_id] !== cookie) { + send_state(socket, get_game_state(socket.game_id)) + send_message(socket, "warning", "Synchronization error!") + return + } try { let state = get_game_state(socket.game_id) let old_active = state.active + + // Don't update cookie during simultaneous turns, as it results + // in many in-flight collisions. + if (old_active !== "Both") + game_cookies[socket.game_id] ++ + state = socket.rules.action(state, socket.role, action, args) put_new_state(socket.game_id, state, old_active, socket.role, action, args) } catch (err) { console.log(err) - return send_message(socket, 'error', err.toString()) + return send_message(socket, "error", err.toString()) } } |