From: Carl Worth Date: Fri, 26 Jun 2020 14:45:10 +0000 (-0700) Subject: Start the judging_idle timer whenever a judgment is received X-Git-Url: https://git.cworth.org/git?p=lmno-server;a=commitdiff_plain;h=60c56d50f8ada21f0dc9eea0bf4485cc7fcf1375 Start the judging_idle timer whenever a judgment is received Previously, we were starting the judging_idle timer only when a user reported they were in the process of judging. This caused a bug in the following scenario: * No players group any words * Majority of players submit the word groups unchanged * Minority of players drop from the game * The PHASE_IDLE_TIMEOUT passes At this point, the game is supposed to consider the judging phase as idle, but it wasn't doing this because the idle timer never got started, (because no players actually grouped any words). This bug came up in some (admittedly artificial) manual testing. There's no chane to the test suite here because the current test suite isn't yet exercising the timing related aspects of the game, (the phase idle timeouts, etc.). --- diff --git a/empathy.js b/empathy.js index 428627c..5e59dd2 100644 --- a/empathy.js +++ b/empathy.js @@ -268,6 +268,19 @@ class Empathy extends Game { this.broadcast_event_object('ambiguities', this.state.ambiguities); } + reset_judging_timeout() { + if (this.judging_idle_timer) { + clearTimeout(this.judging_idle_timer); + this.judging_idle_timer = 0; + } + if (! this.state.judging_idle) { + this.judging_idle_timer = setTimeout(() => { + this.state.judging_idle = true; + this.broadcast_event_object('judging-idle', true); + }, PHASE_IDLE_TIMEOUT * 1000); + } + } + receive_judged(prompt_id, session_id, word_groups) { const player = this.players_by_session[session_id]; if (! player) @@ -280,6 +293,8 @@ class Empathy extends Game { if (prompt !== this.state.active_prompt) return { valid: false, message: "Prompt no longer active" }; + this.reset_judging_timeout(); + /* Each player submits some number of groups of answers that * should be considered equivalent. The server expands that into * the set of pair-wise equivalencies that are expressed. The @@ -352,16 +367,7 @@ class Empathy extends Game { if (prompt !== this.state.active_prompt) return { valid: false, message: "Prompt no longer active" }; - if (this.judging_idle_timer) { - clearTimeout(this.judging_idle_timer); - this.judging_idle_timer = 0; - } - if (! this.state.judging_idle) { - this.judging_idle_timer = setTimeout(() => { - this.state.judging_idle = true; - this.broadcast_event_object('judging-idle', true); - }, PHASE_IDLE_TIMEOUT * 1000); - } + this.reset_judging_timeout(); /* Notify all players that this player is actively judging. */ this.state.players_judging.add(player.name);