+ receive_judging(prompt_id, session_id) {
+ const player = this.players_by_session[session_id];
+ if (! player)
+ return { valid: false, message: "Player not found" };
+
+ const prompt = this.state.prompts.find(p => p.id === prompt_id);
+ if (! prompt)
+ return { valid: false, message: "Prompt not found" };
+
+ if (prompt !== this.state.active_prompt)
+ return { valid: false, message: "Prompt no longer active" };
+
+ /* Notify all players this this player is actively judging. */
+ this.state.players_judging.add(player.name);
+ this.broadcast_event_object('player-judging', player.name);
+
+ return { valid: true };
+ }
+
+ /* Returns true if vote toggled, false for player or prompt not found */
+ toggle_end_judging(prompt_id, session_id) {
+ const player = this.players_by_session[session_id];
+
+ const prompt = this.state.prompts.find(p => p.id === prompt_id);
+ if (! prompt || ! player)
+ return false;
+
+ if (this.state.end_judging.has(player.name)) {
+ this.state.end_judging.delete(player.name);
+ this.broadcast_event_object('unvote-end-judging', player.name);
+ } else {
+ this.state.end_judging.add(player.name);
+ this.broadcast_event_object('vote-end-judging', player.name);
+ }
+
+ return true;
+ }
+