X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=empathy.js;h=9bc5740d1b9b6fab0bed5d47e3dcb99138bc5676;hb=3b34788d2953573eb46291b17a7a5562a2cc0f47;hp=7a75b71ecdd12a071945cdb89c0a8530cf38ce94;hpb=0787b1e92bfb59e3f2c4e8953ca5d898ff04bee3;p=empires-server diff --git a/empathy.js b/empathy.js index 7a75b71..9bc5740 100644 --- a/empathy.js +++ b/empathy.js @@ -5,8 +5,11 @@ class Empathy extends Game { constructor(id) { super(id); this.state = { - prompts: [] + prompts: [], + active_prompt: null, + players_answered: 0 }; + this.answers = []; this.next_prompt_id = 1; } @@ -35,6 +38,50 @@ class Empathy extends Game { return true; } + + /* 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 }; + } } Empathy.router = express.Router(); @@ -72,6 +119,26 @@ router.post('/vote/:prompt_id([0-9]+)', (request, response) => { response.sendStatus(404); }); +router.post('/start/:prompt_id([0-9]+)', (request, response) => { + const game = request.game; + const prompt_id = parseInt(request.params.prompt_id, 10); + + if (game.start(prompt_id)) + response.sendStatus(200); + else + 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",