X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=empathy.js;h=7a75b71ecdd12a071945cdb89c0a8530cf38ce94;hb=0787b1e92bfb59e3f2c4e8953ca5d898ff04bee3;hp=12a743e87aad296cace8420b8fb6f28cfd8dfe7e;hpb=1b8674fabbdfab627f12727cdc3616a233cd767a;p=lmno-server diff --git a/empathy.js b/empathy.js index 12a743e..7a75b71 100644 --- a/empathy.js +++ b/empathy.js @@ -4,10 +4,73 @@ const Game = require("./game.js"); class Empathy extends Game { constructor(id) { super(id); + this.state = { + prompts: [] + }; + this.next_prompt_id = 1; + } + + add_prompt(items, prompt_string) { + const prompt = new Prompt(this.next_prompt_id, items, prompt_string); + this.next_prompt_id++; + + this.state.prompts.push(prompt); + + this.broadcast_event_object('prompt', prompt); + + return prompt; + } + + /* Returns true if vote toggled, false for player or prompt not found */ + toggle_vote(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; + + prompt.toggle_vote(player.name); + + this.broadcast_event_object('prompt', prompt); + + return true; } } Empathy.router = express.Router(); +const router = Empathy.router; + +class Prompt { + constructor(id, items, prompt) { + this.id = id; + this.items = items; + this.prompt = prompt; + this.votes = []; + } + + toggle_vote(player_name) { + if (this.votes.find(v => v === player_name)) + this.votes = this.votes.filter(v => v !== player_name); + else + this.votes.push(player_name); + } +} + +router.post('/prompts', (request, response) => { + const game = request.game; + + game.add_prompt(request.body.items, request.body.prompt); +}); + +router.post('/vote/:prompt_id([0-9]+)', (request, response) => { + const game = request.game; + const prompt_id = parseInt(request.params.prompt_id, 10); + + if (game.toggle_vote(prompt_id, request.session.id)) + response.sendStatus(200); + else + response.sendStatus(404); +}); Empathy.meta = { name: "Empathy",