-
Notifications
You must be signed in to change notification settings - Fork 0
/
engine.js
134 lines (110 loc) · 2.56 KB
/
engine.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
var util = require('util')
,User = require('./user.js')
,Game = require('./game.js')
,MessageParser = require('./message-parser.js')
,MessageBuilder = require('./message-builder.js')
;
function Engine(server) {
this.server = server;
this.messageParser = null;
this.messageBuilder = null;
this.users = [];
this.games = [];
this.gameId = 0;
}
Engine.prototype = {
/**
* Initializes the Engine, creates the message parser and builder.
*
* @return this.
*/
init: function() {
this.messageParser = new MessageParser(this);
this.messageBuilder = new MessageBuilder();
return this;
},
//---> Users
/**
* Get a user by its id.
*
* @param id Id of the user (same as the client id and player id).
* @return User object or null.
*/
getUser: function(id) {
return this.users[id];
},
/**
* Creates a new user object and adds it to the list.
*
* @param client Client object handling the connection.
* @return The new user.
*/
addUser: function(client) {
return this.users[client.id] = new User(client);
},
/**
* Called when a client disconnect.
*
* @param client Client object handling the connection.
* @return this.
*/
clientClose: function(client) {
var user = this.getUser(client.id);
if (user.inGame != null) {
var game = this.getGame(user.inGame);
game.clientClose(user);
user.inGame = null;
}
// TODO
// this.removeUser(user);
return this;
},
//---> Games
/**
* Get a game by its id.
*
* @param id Id of the game.
* @return Game object or null.
*/
getGame: function(id) {
return this.games[id];
},
/**
* Creates a new game object and adds it to the list.
*
* @param id Id of the new game to create.
* @return The new game.
*/
addGame: function(id) {
return this.games[id] = new Game(id, this).init().start();
},
/**
* Creates a new game and makes the user join it.
*
* @param user User joining the game (User object).
* @return The new game.
*/
createGame: function(user) {
var game = this.addGame(this.gameId++);
game.newPlayer(user);
return game;
},
/**
* Adds a user to an existing game.
*
* @param user User joining the game (User object).
* @param gameId ID of the game to join.
* @return The new game.
*/
joinGame: function(user, gameId) {
var game = this.getGame(gameId);
if (game != null) {
game.newPlayer(user);
}
return game;
},
getGamesListMessage: function() {
return this.messageBuilder.createGamesListData(this.games);
},
};
module.exports = Engine;