From: Carl Worth Date: Sun, 14 Jun 2020 18:18:18 +0000 (-0700) Subject: Add "/answering" and "/judging" endpoints X-Git-Url: https://git.cworth.org/git?p=lmno-server;a=commitdiff_plain;h=9008208ecebde544671e9c42f1d15fc9fc834f91 Add "/answering" and "/judging" endpoints These are set up so that clients can report when they are doing any answering or judging. The server then passes this along so that other clients can be aware of what's going on. --- diff --git a/empathy.js b/empathy.js index 7e53486..ae400a6 100644 --- a/empathy.js +++ b/empathy.js @@ -142,6 +142,25 @@ class Empathy extends Game { return { valid: true }; } + receive_answering(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 that this player is actively answering. */ + this.state.players_answering.add(player.name); + this.broadcast_event_object('player-answering', player.name); + + return { valid: true }; + } + /* Returns true if vote toggled, false for player or prompt not found */ toggle_end_answers(prompt_id, session_id) { const player = this.players_by_session[session_id]; @@ -232,6 +251,25 @@ class Empathy extends Game { return { valid: true }; } + 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]; @@ -426,6 +464,15 @@ router.post('/answer/:prompt_id([0-9]+)', (request, response) => { response.json(result); }); +router.post('/answering/:prompt_id([0-9]+)', (request, response) => { + const game = request.game; + const prompt_id = parseInt(request.params.prompt_id, 10); + + const result = game.receive_answering(prompt_id, + request.session.id); + response.json(result); +}); + router.post('/end-answers/:prompt_id([0-9]+)', (request, response) => { const game = request.game; const prompt_id = parseInt(request.params.prompt_id, 10); @@ -449,6 +496,15 @@ router.post('/judged/:prompt_id([0-9]+)', (request, response) => { response.json(result); }); +router.post('/judging/:prompt_id([0-9]+)', (request, response) => { + const game = request.game; + const prompt_id = parseInt(request.params.prompt_id, 10); + + const result = game.receive_judging(prompt_id, + request.session.id); + response.json(result); +}); + router.post('/end-judging/:prompt_id([0-9]+)', (request, response) => { const game = request.game; const prompt_id = parseInt(request.params.prompt_id, 10);