UNPKG

1.76 kBJavaScriptView Raw
1var EventEmitter = require('events');
2var debug = require('debug')('space-dud:Game');
3
4var Game = function() {
5
6 var that = new EventEmitter();
7
8 // Imports
9 var Player = require('./Player.js');
10 var ControllerClient = require('./clients/ControllerClient.js');
11 var DisplayClient = require('./clients/DisplayClient.js');
12
13 // Fields
14 var shortid = require('shortid');
15 var player_lookup = {};
16
17 debug('Created a new Game.');
18
19 // Private functions
20 function addPlayer(player, player_id) {
21 player_lookup[player_id] = player;
22
23 debug('Added a new player with id: '+player_id);
24
25 return that;
26 };
27
28 function removePlayer(player_id) {
29 debug('Removing player with id: '+player_id);
30
31 player_lookup[player_id] = undefined;
32 };
33
34 // Public functions
35 that.createControllerClient = function(socket) {
36 var player_id = shortid.generate();
37 var player = new Player(player_id);
38
39 addPlayer(player, player_id);
40 player.on('disconnect', function() {
41 removePlayer(player_id);
42 });
43
44 var client = new ControllerClient(socket);
45 player.setControllerClient(client);
46
47 client.sendPlayerId(player_id);
48 that.emit('player_ready', player);
49
50 return that;
51 };
52
53 that.createDisplayClient = function(socket, player_id) {
54 var player = that.getPlayer(player_id);
55 if(player === undefined) {
56 throw new Error('No player with id '+player_id+' exists.');
57
58 } else {
59 var client = new DisplayClient(socket);
60 player.addConsumerClient(client);
61 }
62
63 return that;
64 };
65
66 that.getPlayer = function(player_id) {
67 if(player_lookup[player_id]) {
68 return player_lookup[player_id];
69 } else {
70 return undefined;
71 }
72 };
73
74 return that;
75}
76
77module.exports = Game;