+
+ /* Returns true on success, false for prompt not found. */
+ start(prompt_id) {
+ const prompt = this.state.prompts.find(p => p.id === prompt_id);
+ if (! prompt)
+ return false;
+
+ /* Ignore any start request that comes in while a prompt is
+ * already being played. */
+ if (this.state.active_prompt)
+ return false;
+
+ this.state.active_prompt = prompt;
+
+ this.broadcast_event_object('start', prompt);
+
+ return true;
+ }
+
+ receive_answer(prompt_id, session_id, answers) {
+ 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" };
+
+ /* Save the complete answers for our own use later. */
+ this.answers.push({
+ player: player,
+ answers: answers
+ });
+
+ /* And notify players how many players have answered. */
+ this.state.players_answered++;
+
+ this.broadcast_event_object('answered', this.state.players_answered);
+
+ return { valid: true };
+ }