X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=empathy.js;h=9bc5740d1b9b6fab0bed5d47e3dcb99138bc5676;hb=3b34788d2953573eb46291b17a7a5562a2cc0f47;hp=d91225d7e49e7da9a8e8f7a850d420e007931bff;hpb=8001b29a6250b40adb530a084e0911a8625a5b44;p=empires-server diff --git a/empathy.js b/empathy.js index d91225d..9bc5740 100644 --- a/empathy.js +++ b/empathy.js @@ -6,8 +6,10 @@ class Empathy extends Game { super(id); this.state = { prompts: [], - active_prompt: null + active_prompt: null, + players_answered: 0 }; + this.answers = []; this.next_prompt_id = 1; } @@ -54,6 +56,32 @@ class Empathy extends Game { 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 }; + } } Empathy.router = express.Router(); @@ -101,6 +129,16 @@ router.post('/start/:prompt_id([0-9]+)', (request, response) => { response.sendStatus(404); }); +router.post('/answer/:prompt_id([0-9]+)', (request, response) => { + const game = request.game; + const prompt_id = parseInt(request.params.prompt_id, 10); + + const result = game.receive_answer(prompt_id, + request.session.id, + request.body.answers); + response.json(result); +}); + Empathy.meta = { name: "Empathy", identifier: "empathy",