X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=game.js;h=8a0e0834c0a48587e24e6ff3d4589224b87a2a3b;hb=b5a5c28f09756d7a7e65dd2bc75de130bc71e0dd;hp=de77148aa3ed58888930d4b872da8e0c92a28644;hpb=16564f558ee42c3fbc0ca5ee56c91407253747b5;p=lmno-server diff --git a/game.js b/game.js index de77148..8a0e083 100644 --- a/game.js +++ b/game.js @@ -1,9 +1,8 @@ /* A single player can have multiple connections, (think, multiple * browser windows with a common session cookie). */ class Player { - constructor(id, session_id, name, connection) { + constructor(id, name, connection) { this.id = id; - this.session_id = session_id; this.name = name; this.connections = [connection]; this.team = ""; @@ -73,38 +72,27 @@ class Game { add_player(session, connection) { /* First see if we already have a player object for this session. */ - const existing_index = this.players.findIndex( - player => player.session_id === session.id); - if (existing_index >= 0) { - const player = this.players[existing_index]; - player.add_connection(connection); - return player; + const existing = this.players[session.id]; + if (existing) { + existing.add_connection(connection); + return existing; } /* No existing player. Add a new one. */ const id = this.next_player_id; - const player = new Player(id, session.id, session.nickname, connection); + const player = new Player(id, session.nickname, connection); /* Broadcast before adding player to list (to avoid announcing the * new player to itself). */ const player_data = JSON.stringify({ id: player.id, name: player.name }); this.broadcast_event("player-enter", player_data); - this.players.push(player); + this.players[session.id] = player; this.next_player_id++; return player; } - find_player(session) { - const existing_index = this.players.findIndex( - player => player.session_id === session.id); - if (existing_index >= 0) - return this.players[existing_index]; - - return null; - } - /* Drop a connection object from a player, and if it's the last one, * then drop that player from the game's list of players. */ remove_player_connection(player, connection) { @@ -118,7 +106,8 @@ class Game { /* Send a string to all players */ broadcast_string(str) { - this.players.forEach(player => player.send(str + '\n')); + for (let [session_id, player] of Object.entries(this.players)) + player.send(str + '\n'); } /* Send an event to all players. @@ -166,7 +155,7 @@ class Game { } handle_player(request, response) { - const player = this.find_player(request.session); + const player = this.players[request.session.id]; const name = request.body.name; const team = request.body.team; var updated = false;