]> git.cworth.org Git - lmno-server/blob - server.js
Add some linting fixes
[lmno-server] / server.js
1 const express = require("express");
2 const cors = require("cors");
3 const body_parser = require("body-parser");
4
5 const app = express();
6 app.use(cors());
7
8 class Game {
9   constructor() {
10     this._players = [];
11     this.next_player_id = 1;
12   }
13
14   add_player(name, character) {
15     this._players.push({id: this.next_player_id,
16                        name: name,
17                        character: character,
18                        captures: [],
19                       })
20     this.next_player_id++;
21   }
22
23   remove_player(id) {
24     const index = this._players.findIndex(player => player.id === id);
25     this._players.splice(index, 1);
26   }
27
28   remove_all_players() {
29     this._players = [];
30     this.next_player_id = 1;
31   }
32
33   capture(captor_id, captee_id) {
34     /* TODO: Fix to fail on already-captured players (or to move the
35      * captured player from an old captor to a new—need to clarify in
36      * the API specification which we want here. */
37     let captor = this._players.find(player => player.id === captor_id);
38     captor.captures.push(captee_id);
39   }
40
41   liberate(captee_id) {
42     let captor = this._players.find(player => player.captures.includes(captee_id));
43     captor.captures.splice(captor.captures.indexOf(captee_id), 1);
44   }
45
46   restart() {
47     for (const player of this._players) {
48       player.captures = [];
49     }
50   }
51
52   get characters() {
53     return this._players.map(player => player.character);
54   }
55
56   get empires() {
57     return this._players.map(player => ({id: player.id, captures: player.captures}));
58   }
59
60   get players() {
61     return this._players.map(player => ({id: player.id, name: player.name }));
62   }
63 }
64
65 const game = new Game();
66
67 app.use(body_parser.urlencoded({ extended: false }));
68 app.use(body_parser.json());
69
70 app.get('/', (request, response) => {
71   response.send('Hello World!');
72 });
73
74 app.post('/register', (request, response) => {
75   game.add_player(request.body.name, request.body.character);
76   response.send();
77 });
78
79 app.post('/deregister/:id', (request, response) => {
80   game.remove_player(parseInt(request.params.id));
81   response.send();
82 });
83
84 app.post('/reset', (request, response) => {
85   game.remove_all_players();
86   response.send();
87 });
88
89 app.post('/capture/:captor/:captee', (request, response) => {
90   game.capture(parseInt(request.params.captor), parseInt(request.params.captee));
91   response.send();
92 });
93
94 app.post('/liberate/:id', (request, response) => {
95   game.liberate(parseInt(request.params.id));
96   response.send();
97 });
98
99 app.post('/restart', (request, response) => {
100   game.restart(parseInt(request.params.id));
101     response.send();
102 });
103
104 app.get('/characters', (request, response) => {
105   response.send(game.characters);
106 });
107
108 app.get('/empires', (request, response) => {
109   response.send(game.empires);
110 });
111
112 app.get('/players', (request, response) => {
113   response.send(game.players);
114 });
115
116 app.listen(3000, function () {
117   console.log('Example app listening on port 3000!');
118 });