From 310616b2892b7bccf1c2e5b3c7f28ea1dc962560 Mon Sep 17 00:00:00 2001 From: Carl Worth Date: Sat, 2 May 2020 19:23:37 -0700 Subject: [PATCH] Implement the rest of the API This is up to date with commit 0411bdc5c4dbad187f7e25fa1fb40a23c3e0e940 of the empires-api as found at: https://git.cworth.org/git/empires-api --- server.js | 92 ++++++++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 84 insertions(+), 8 deletions(-) diff --git a/server.js b/server.js index 4957f32..4d71998 100644 --- a/server.js +++ b/server.js @@ -5,16 +5,59 @@ const app = express(); class Game { constructor() { - this.players = []; + this._players = []; this.next_player_id = 1; } add_player(name, character) { - this.players.push({id: this.next_player_id, + this._players.push({id: this.next_player_id, name: name, - character: character}) + character: character, + captures: [], + }) this.next_player_id++; } + + remove_player(id) { + const index = this._players.findIndex(player => player.id === id); + this._players.splice(index, 1); + } + + remove_all_players() { + this._players = []; + this.next_player_id = 1; + } + + capture(captor_id, captee_id) { + /* TODO: Fix to fail on already-captured players (or to move the + * captured player from an old captor to a new—need to clarify in + * the API specification which we want here. */ + let captor = this._players.find(player => player.id === captor_id); + captor.captures.push(captee_id); + } + + liberate(captee_id) { + let captor = this._players.find(player => player.captures.includes(captee_id)); + captor.captures.splice(captor.captures.indexOf(captee_id), 1); + } + + restart() { + for (const player of this._players) { + player.captures = []; + } + } + + get characters() { + return this._players.map(player => player.character); + } + + get empires() { + return this._players.map(player => ({id: player.id, captures: player.captures})); + } + + get players() { + return this._players.map(player => ({id: player.id, name: player.name })); + } } game = new Game(); @@ -22,19 +65,52 @@ game = new Game(); app.use(body_parser.urlencoded({ extended: false })); app.use(body_parser.json()); -app.get('/', function (requses, response) { +app.get('/', (request, response) => { response.send('Hello World!'); }); -app.get('/players', function (request, response) { - response.send(game.players); +app.post('/register', (request, response) => { + game.add_player(request.body.name, request.body.character); + response.send(); }); -app.post('/register', function (request, response) { - game.add_player(request.body.name, request.body.character); +app.post('/deregister/:id', (request, response) => { + game.remove_player(parseInt(request.params.id)); + response.send(); +}); + +app.post('/reset', (request, response) => { + game.remove_all_players(); + response.send(); +}); + +app.post('/capture/:captor/:captee', (request, response) => { + game.capture(parseInt(request.params.captor), parseInt(request.params.captee)); + response.send(); +}); + +app.post('/liberate/:id', (request, response) => { + game.liberate(parseInt(request.params.id)); response.send(); }); +app.post('/restart', (request, response) => { + game.restart(parseInt(request.params.id)); + response.send(); +}); + +app.get('/characters', (request, response) => { + response.send(game.characters); +}); + +app.get('/empires', (request, response) => { + response.send(game.empires); +}); + +app.get('/players', (request, response) => { + response.send(game.players); +}); + app.listen(3000, function () { console.log('Example app listening on port 3000!'); }); -- 2.43.0