gamelet-cli 0.7.10 → 0.7.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/assets/package.json.twig +3 -3
- package/assets/server/static/js/monitor.js +6 -0
- package/assets/server/views/monitor.twig +1 -0
- package/assets/tsconfig.json.twig +1 -1
- package/build/package.json +67 -67
- package/build/src/gamelet/download.js +773 -737
- package/build/src/gamelet/merges.js +181 -179
- package/build/src/gamelet/prepare.js +276 -277
- package/build/src/gamelet/upload.js +280 -279
- package/build/src/index.js +86 -86
- package/build/src/server/Constant.js +9 -9
- package/build/src/server/entities/Client.js +78 -78
- package/build/src/server/entities/ClientOwner.js +67 -67
- package/build/src/server/entities/ClientProject.js +84 -84
- package/build/src/server/entities/Gameroom.js +89 -89
- package/build/src/server/entities/GameroomBase.js +276 -276
- package/build/src/server/entities/Gamezone.js +73 -73
- package/build/src/server/entities/ListFilter.js +193 -193
- package/build/src/server/entities/Monitor.js +94 -81
- package/build/src/server/entities/Player.js +140 -140
- package/build/src/server/managers/ApiManager.js +75 -75
- package/build/src/server/managers/ClientManager.js +64 -64
- package/build/src/server/managers/Database.js +627 -627
- package/build/src/server/managers/GameroomManager.js +392 -392
- package/build/src/server/managers/ManagerBase.js +17 -17
- package/build/src/server/managers/MonitorManager.js +73 -73
- package/build/src/server/managers/PlayerManager.js +108 -108
- package/build/src/server/managers/SocketManager.js +60 -60
- package/build/src/server/managers/UserManager.js +58 -58
- package/build/src/server/messages/Message.js +143 -143
- package/build/src/server/server.js +112 -113
- package/build/src/server/services/ServiceBase.js +25 -25
- package/build/src/server/services/clientService.js +23 -23
- package/build/src/server/services/gameroomService.js +121 -121
- package/build/src/server/services/gltserver.service.js +23 -23
- package/build/src/server/services/playerService.js +32 -32
- package/build/src/server/startServer.js +32 -33
- package/build/src/server/types/BadgeStatus.js +25 -25
- package/build/src/server/types/OrderType.js +38 -38
- package/build/src/server/types/SubmitType.js +24 -24
- package/build/src/server/types/TimeRange.js +26 -26
- package/build/src/server/utils/ArrayUtil.js +126 -126
- package/build/src/server/utils/IntUtil.js +9 -9
- package/build/src/server/utils/ObjectUtil.js +191 -191
- package/build/src/server/utils/StringUtil.js +37 -37
- package/build/src/utils/cli.js +53 -53
- package/build/src/utils/file.js +350 -337
- package/build/src/utils/init.js +57 -42
- package/build/src/utils/log.js +18 -17
- package/build/src/utils/net.js +43 -39
- package/package.json +2 -2
|
@@ -1,392 +1,392 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.GameroomManager = void 0;
|
|
4
|
-
const ObjectUtil_1 = require("./../utils/ObjectUtil");
|
|
5
|
-
const ClientManager_1 = require("./ClientManager");
|
|
6
|
-
const Message_1 = require("./../messages/Message");
|
|
7
|
-
const GameroomBase_1 = require("./../entities/GameroomBase");
|
|
8
|
-
const ListFilter_1 = require("./../entities/ListFilter");
|
|
9
|
-
const Gamezone_1 = require("./../entities/Gamezone");
|
|
10
|
-
const Gameroom_1 = require("./../entities/Gameroom");
|
|
11
|
-
const ManagerBase_1 = require("./ManagerBase");
|
|
12
|
-
const StringUtil_1 = require("../utils/StringUtil");
|
|
13
|
-
class GameroomManager extends ManagerBase_1.ManagerBase {
|
|
14
|
-
constructor(server) {
|
|
15
|
-
super('GameroomManager');
|
|
16
|
-
this.server = server;
|
|
17
|
-
this.gameroomMap = {};
|
|
18
|
-
/**
|
|
19
|
-
* first key: client key
|
|
20
|
-
* second key: gameZone code
|
|
21
|
-
*/
|
|
22
|
-
this.gamezoneMap = {};
|
|
23
|
-
}
|
|
24
|
-
generateNewGameroomCode() {
|
|
25
|
-
let code = StringUtil_1.StringUtil.generateRandomString(10);
|
|
26
|
-
while (this.getGameroom(code)) {
|
|
27
|
-
code = StringUtil_1.StringUtil.generateRandomString(10);
|
|
28
|
-
}
|
|
29
|
-
return code;
|
|
30
|
-
}
|
|
31
|
-
getGameroom(code) {
|
|
32
|
-
return this.gameroomMap[code];
|
|
33
|
-
}
|
|
34
|
-
getGameroomByName(zoneCode, name) {
|
|
35
|
-
for (let code in this.gameroomMap) {
|
|
36
|
-
let room = this.gameroomMap[code];
|
|
37
|
-
if (room.name == name && room.gamezone.code == zoneCode) {
|
|
38
|
-
return room;
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
return null;
|
|
42
|
-
}
|
|
43
|
-
getOrCreateGamezone(client, code) {
|
|
44
|
-
let zoneMap = this.gamezoneMap[client.key];
|
|
45
|
-
if (zoneMap) {
|
|
46
|
-
return zoneMap[code] || this.createGameZone(client, code);
|
|
47
|
-
}
|
|
48
|
-
else {
|
|
49
|
-
this.gamezoneMap[client.key] = {};
|
|
50
|
-
}
|
|
51
|
-
return this.createGameZone(client, code);
|
|
52
|
-
}
|
|
53
|
-
getGamezone(client, code) {
|
|
54
|
-
let zoneMap = this.gamezoneMap[client.key];
|
|
55
|
-
return zoneMap && zoneMap[code];
|
|
56
|
-
}
|
|
57
|
-
getClientZone(client) {
|
|
58
|
-
return this.getOrCreateGamezone(client, '/Sys/Ch');
|
|
59
|
-
}
|
|
60
|
-
createGameZone(client, code) {
|
|
61
|
-
let zone = new Gamezone_1.Gamezone(code, this.server, client);
|
|
62
|
-
this.gamezoneMap[client.key][code] = zone;
|
|
63
|
-
zone.once(GameroomBase_1.GameroomBase.EVENT.DISPOSED, () => {
|
|
64
|
-
delete this.gamezoneMap[client.key][code];
|
|
65
|
-
});
|
|
66
|
-
zone.on(GameroomBase_1.GameroomBase.EVENT.PLAYER_REMOVED, (p) => {
|
|
67
|
-
zone.broadcast(Message_1.Message.forPlayerLeftZone(zone.code, p.code));
|
|
68
|
-
});
|
|
69
|
-
zone.on(GameroomBase_1.GameroomBase.EVENT.STATUS_CHANGED, () => {
|
|
70
|
-
zone.broadcast(Message_1.Message.forZoneStatusChanged(zone));
|
|
71
|
-
});
|
|
72
|
-
zone.on(GameroomBase_1.GameroomBase.EVENT.PLAYER_STATE_CHANGED, (p, key, value) => {
|
|
73
|
-
zone.broadcast(Message_1.Message.forZonePlayerStateChanged(zone.code, p.code, key, value, zone.getBrainer().code));
|
|
74
|
-
});
|
|
75
|
-
zone.on(GameroomBase_1.GameroomBase.EVENT.PLAYER_STATES_CHANGED, (p, states) => {
|
|
76
|
-
zone.broadcast(Message_1.Message.forZonePlayerStatesChanged(zone.code, p.code, states, zone.getBrainer().code));
|
|
77
|
-
});
|
|
78
|
-
zone.on(GameroomBase_1.GameroomBase.EVENT.PLAYER_SYNCED_CHANGED, (p, value, brainerCode) => {
|
|
79
|
-
zone.broadcast(Message_1.Message.forZonePlayerSyncedChanged(zone.code, p.code, value, brainerCode));
|
|
80
|
-
});
|
|
81
|
-
return zone;
|
|
82
|
-
}
|
|
83
|
-
createOrJoinGameroom(player, gamezoneCode, gameroomName, password, maxPlayers, state, stateJson, allowGuest) {
|
|
84
|
-
let gameroom = this.getGameroomByName(gamezoneCode, gameroomName);
|
|
85
|
-
if (gameroom) {
|
|
86
|
-
return this.joinGameroom(player, gameroom.code, password);
|
|
87
|
-
}
|
|
88
|
-
else {
|
|
89
|
-
return this.createGameroom(player, gamezoneCode, gameroomName, password, maxPlayers, state, stateJson, allowGuest);
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
createGameroom(player, gamezoneCode, gameroomName, password, maxPlayers, state, stateJson, allowGuest) {
|
|
93
|
-
this.designContract(!player.getGameroom(), 'Already in a gameroom');
|
|
94
|
-
let gamezone = this.getOrCreateGamezone(player.client, gamezoneCode);
|
|
95
|
-
let gameroom = new Gameroom_1.Gameroom(this.server, player.client, this.generateNewGameroomCode(), player, gamezone, gameroomName, password, maxPlayers, state, stateJson, allowGuest);
|
|
96
|
-
this.gameroomMap[gameroom.code] = gameroom;
|
|
97
|
-
gameroom.once(GameroomBase_1.GameroomBase.EVENT.DISPOSED, () => {
|
|
98
|
-
delete this.gameroomMap[gameroom.code];
|
|
99
|
-
gamezone.broadcast(Message_1.Message.forRoomClosed(gameroom));
|
|
100
|
-
});
|
|
101
|
-
gamezone.addGameroom(gameroom);
|
|
102
|
-
gameroom.addPlayer(player);
|
|
103
|
-
gamezone.broadcast(Message_1.Message.forRoomCreated(gameroom));
|
|
104
|
-
gameroom.on(GameroomBase_1.GameroomBase.EVENT.BRAINER_CHANGED, () => {
|
|
105
|
-
if (gameroom.getBrainer()) {
|
|
106
|
-
gameroom.broadcast(Message_1.Message.forRoomBrainerChanged(gameroom));
|
|
107
|
-
}
|
|
108
|
-
});
|
|
109
|
-
gameroom.on(GameroomBase_1.GameroomBase.EVENT.PLAYER_ADDED, (p) => {
|
|
110
|
-
gameroom.broadcast(Message_1.Message.forPlayerJoinedRoom(gameroom.code, p));
|
|
111
|
-
});
|
|
112
|
-
gameroom.on(GameroomBase_1.GameroomBase.EVENT.PLAYER_REMOVED, (p) => {
|
|
113
|
-
gameroom.broadcast(Message_1.Message.forPlayerLeftRoom(gameroom.code, p.code));
|
|
114
|
-
});
|
|
115
|
-
gameroom.on(GameroomBase_1.GameroomBase.EVENT.STATUS_CHANGED, () => {
|
|
116
|
-
gameroom.broadcast(Message_1.Message.forRoomStatusChanged(gameroom));
|
|
117
|
-
gamezone.broadcast(Message_1.Message.forRoomStatusChanged(gameroom));
|
|
118
|
-
});
|
|
119
|
-
gameroom.on(GameroomBase_1.GameroomBase.EVENT.PLAYER_STATE_CHANGED, (p, key, value) => {
|
|
120
|
-
gameroom.broadcast(Message_1.Message.forRoomPlayerStateChanged(gameroom.code, p.code, key, value));
|
|
121
|
-
});
|
|
122
|
-
gameroom.on(GameroomBase_1.GameroomBase.EVENT.PLAYER_STATES_CHANGED, (p, states) => {
|
|
123
|
-
gameroom.broadcast(Message_1.Message.forRoomPlayerStatesChanged(gameroom.code, p.code, states));
|
|
124
|
-
});
|
|
125
|
-
gameroom.on(GameroomBase_1.GameroomBase.EVENT.PLAYER_SYNCED_CHANGED, (p, value, brainerCode) => {
|
|
126
|
-
gameroom.broadcast(Message_1.Message.forRoomPlayerSyncedChanged(gameroom.code, p.code, value, brainerCode));
|
|
127
|
-
});
|
|
128
|
-
return Promise.resolve(gameroom);
|
|
129
|
-
}
|
|
130
|
-
joinGameroom(player, gameroomCode, password) {
|
|
131
|
-
this.designContract(!player.getGameroom(), 'Already in a gameroom');
|
|
132
|
-
let gameroom = this.getGameroom(gameroomCode);
|
|
133
|
-
this.designContract(gameroom, 'Gameroom not found');
|
|
134
|
-
this.designContract(gameroom.state == Gameroom_1.GameroomState.OPEN, 'The room is currently not open for joining.');
|
|
135
|
-
this.designContract(!gameroom.password || gameroom.password == password, 'Password not matched');
|
|
136
|
-
gameroom.addPlayer(player);
|
|
137
|
-
return Promise.resolve(gameroom);
|
|
138
|
-
}
|
|
139
|
-
leaveGameroom(player, gameroomCode) {
|
|
140
|
-
let gameroom = gameroomCode ? this.getGameroom(gameroomCode) : player.getGameroom();
|
|
141
|
-
this.designContract(gameroom, 'Gameroom not found');
|
|
142
|
-
gameroom.removePlayer(player);
|
|
143
|
-
return Promise.resolve(gameroom.code);
|
|
144
|
-
}
|
|
145
|
-
enterGamezone(player, gamezoneCode) {
|
|
146
|
-
let gamezone = this.getOrCreateGamezone(player.client, gamezoneCode);
|
|
147
|
-
gamezone.addPlayer(player);
|
|
148
|
-
return Promise.resolve(gamezone);
|
|
149
|
-
}
|
|
150
|
-
leaveGamezone(player, gamezoneCode) {
|
|
151
|
-
let gamezone = this.getGamezone(player.client, gamezoneCode);
|
|
152
|
-
if (gamezone) {
|
|
153
|
-
gamezone.removePlayer(player);
|
|
154
|
-
}
|
|
155
|
-
return Promise.resolve(true);
|
|
156
|
-
}
|
|
157
|
-
queryGameroom(player, gameroomCode) {
|
|
158
|
-
let gameroom = this.getGameroom(gameroomCode);
|
|
159
|
-
this.designContract(gameroom, 'The gameroom is closed.');
|
|
160
|
-
this.designContract(gameroom.client == player.client, 'The gameroom is not in your current game.');
|
|
161
|
-
return Promise.resolve(gameroom);
|
|
162
|
-
}
|
|
163
|
-
listGamerooms(client, gamezoneCode, length, filter) {
|
|
164
|
-
length = Math.min(100, length);
|
|
165
|
-
let gamezone = this.getGamezone(client, gamezoneCode);
|
|
166
|
-
if (gamezone) {
|
|
167
|
-
return Promise.resolve(gamezone.listGamerooms(ListFilter_1.parsePropFilter(filter), length));
|
|
168
|
-
}
|
|
169
|
-
else {
|
|
170
|
-
return Promise.resolve([]);
|
|
171
|
-
}
|
|
172
|
-
}
|
|
173
|
-
listPlayersInGameroom(player) {
|
|
174
|
-
let gameroom = player.getGameroom();
|
|
175
|
-
this.designContract(gameroom, 'Not in any gameroom');
|
|
176
|
-
return Promise.resolve(gameroom.listPlayers());
|
|
177
|
-
}
|
|
178
|
-
listPlayersOfGameroom(_player, gameroomCode) {
|
|
179
|
-
let gameroom = this.getGameroom(gameroomCode);
|
|
180
|
-
this.designContract(gameroom, 'The gameroom is closed.');
|
|
181
|
-
return Promise.resolve(gameroom.listPlayers());
|
|
182
|
-
}
|
|
183
|
-
setGameroomState(player, state, stateJson) {
|
|
184
|
-
let gameroom = player.getGameroom();
|
|
185
|
-
this.designContract(gameroom, 'Not in any gameroom');
|
|
186
|
-
this.designContract(gameroom.getBrainer() == player, 'Not the decision maker.');
|
|
187
|
-
gameroom.state = state;
|
|
188
|
-
stateJson && ObjectUtil_1.ObjectUtil.safeAssign(gameroom.stateJson, stateJson);
|
|
189
|
-
gameroom.emit(GameroomBase_1.GameroomBase.EVENT.STATUS_CHANGED);
|
|
190
|
-
return Promise.resolve(gameroom);
|
|
191
|
-
}
|
|
192
|
-
setGameroomStateJson(player, stateJson) {
|
|
193
|
-
let gameroom = player.getGameroom();
|
|
194
|
-
this.designContract(gameroom, 'Not in any gameroom');
|
|
195
|
-
this.designContract(gameroom.getBrainer() == player, 'Not the decision maker.');
|
|
196
|
-
stateJson && ObjectUtil_1.ObjectUtil.safeAssign(gameroom.stateJson, stateJson);
|
|
197
|
-
gameroom.emit(GameroomBase_1.GameroomBase.EVENT.STATUS_CHANGED);
|
|
198
|
-
return Promise.resolve(gameroom);
|
|
199
|
-
}
|
|
200
|
-
setRoomPlayerState(player, key, value) {
|
|
201
|
-
let gameroom = player.getGameroom();
|
|
202
|
-
this.designContract(gameroom, 'Not in any gameroom');
|
|
203
|
-
gameroom.setPlayerState(player, key, value);
|
|
204
|
-
return Promise.resolve(true);
|
|
205
|
-
}
|
|
206
|
-
setRoomPlayerStates(player, states) {
|
|
207
|
-
let gameroom = player.getGameroom();
|
|
208
|
-
this.designContract(gameroom, 'Not in any gameroom');
|
|
209
|
-
gameroom.setPlayerStates(player, states);
|
|
210
|
-
return Promise.resolve(true);
|
|
211
|
-
}
|
|
212
|
-
setRoomPlayerSynced(player, value, updateBrainer) {
|
|
213
|
-
let gameroom = player.getGameroom();
|
|
214
|
-
this.designContract(gameroom, 'Not in any gameroom');
|
|
215
|
-
return gameroom.setPlayerSynced(player, value, updateBrainer)
|
|
216
|
-
.then(() => gameroom.getBrainer().code);
|
|
217
|
-
}
|
|
218
|
-
updateRoomBrainer(player) {
|
|
219
|
-
let gameroom = player.getGameroom();
|
|
220
|
-
this.designContract(gameroom, 'Not in any gameroom');
|
|
221
|
-
this.designContract(gameroom.getBrainer() == player, 'Not the decision maker.');
|
|
222
|
-
return gameroom.updateBrainer(true)
|
|
223
|
-
.then(brainer => brainer.code);
|
|
224
|
-
}
|
|
225
|
-
broadcastToRoom(player, gameroomCode, data) {
|
|
226
|
-
let gameroom = this.getGameroom(gameroomCode);
|
|
227
|
-
this.designContract(gameroom, 'The gameroom is closed.');
|
|
228
|
-
gameroom.broadcastByPlayer(Message_1.Message.forBroadcast(Message_1.MessageType.BROADCAST_TO_ROOM, player.code, gameroom.code, data), player);
|
|
229
|
-
return Promise.resolve(gameroom.playersCount);
|
|
230
|
-
}
|
|
231
|
-
broadcastToRoom2(player, gameroomCode, data) {
|
|
232
|
-
let gameroom = this.getGameroom(gameroomCode);
|
|
233
|
-
this.designContract(gameroom, 'The gameroom is closed.');
|
|
234
|
-
gameroom.broadcastByPlayer(Message_1.Message.forBroadcast(Message_1.MessageType.BROADCAST_TO_ROOM, player.code, gameroom.code, data), player);
|
|
235
|
-
return Promise.resolve({
|
|
236
|
-
p: gameroom.playersCount,
|
|
237
|
-
t: Date.now(),
|
|
238
|
-
});
|
|
239
|
-
}
|
|
240
|
-
broadcastInRoom(player, data) {
|
|
241
|
-
let gameroom = player.getGameroom();
|
|
242
|
-
this.designContract(gameroom, 'Not in any gameroom');
|
|
243
|
-
gameroom.broadcastByPlayer(Message_1.Message.forBroadcast(Message_1.MessageType.BROADCAST_IN_ROOM, player.code, gameroom.code, data), player);
|
|
244
|
-
return Promise.resolve(gameroom.playersCount);
|
|
245
|
-
}
|
|
246
|
-
broadcastInRoom2(player, data) {
|
|
247
|
-
let gameroom = player.getGameroom();
|
|
248
|
-
this.designContract(gameroom, 'Not in any gameroom');
|
|
249
|
-
gameroom.broadcastByPlayer(Message_1.Message.forBroadcast(Message_1.MessageType.BROADCAST_IN_ROOM, player.code, gameroom.code, data), player);
|
|
250
|
-
return Promise.resolve({
|
|
251
|
-
p: gameroom.playersCount,
|
|
252
|
-
t: Date.now(),
|
|
253
|
-
});
|
|
254
|
-
}
|
|
255
|
-
broadcastToZone(player, gamezoneCode, data) {
|
|
256
|
-
let gamezone = this.getGamezone(player.client, gamezoneCode);
|
|
257
|
-
if (gamezone) {
|
|
258
|
-
gamezone.broadcastByPlayer(Message_1.Message.forBroadcast(Message_1.MessageType.BROADCAST_TO_ZONE, player.code, gamezone.code, data), player);
|
|
259
|
-
return Promise.resolve(gamezone.playersCount);
|
|
260
|
-
}
|
|
261
|
-
else {
|
|
262
|
-
return Promise.resolve(0);
|
|
263
|
-
}
|
|
264
|
-
}
|
|
265
|
-
broadcastToZone2(player, gamezoneCode, data) {
|
|
266
|
-
let gamezone = this.getGamezone(player.client, gamezoneCode);
|
|
267
|
-
if (gamezone) {
|
|
268
|
-
gamezone.broadcastByPlayer(Message_1.Message.forBroadcast(Message_1.MessageType.BROADCAST_TO_ZONE, player.code, gamezone.code, data), player);
|
|
269
|
-
return Promise.resolve({
|
|
270
|
-
p: gamezone.playersCount,
|
|
271
|
-
t: Date.now(),
|
|
272
|
-
});
|
|
273
|
-
}
|
|
274
|
-
else {
|
|
275
|
-
return Promise.resolve({
|
|
276
|
-
p: 0,
|
|
277
|
-
t: Date.now(),
|
|
278
|
-
});
|
|
279
|
-
}
|
|
280
|
-
}
|
|
281
|
-
broadcastInProject(monitor, project, data) {
|
|
282
|
-
let msg = Message_1.Message.forBroadcast(Message_1.MessageType.BROADCAST_IN_PROJECT, monitor.code, '', data);
|
|
283
|
-
let count = 0;
|
|
284
|
-
for (let client of project.listClients()) {
|
|
285
|
-
let gamezone = this.getClientZone(client);
|
|
286
|
-
gamezone.broadcast(msg);
|
|
287
|
-
count += client.playersCount;
|
|
288
|
-
}
|
|
289
|
-
return Promise.resolve(count);
|
|
290
|
-
}
|
|
291
|
-
broadcastInGamelet(monitor, data) {
|
|
292
|
-
let msg = Message_1.Message.forBroadcast(Message_1.MessageType.BROADCAST_IN_GAMELET, monitor.code, '', data);
|
|
293
|
-
let count = 0;
|
|
294
|
-
for (let project of ClientManager_1.clientManager.listProjects()) {
|
|
295
|
-
for (let client of project.listClients()) {
|
|
296
|
-
let gamezone = this.getClientZone(client);
|
|
297
|
-
gamezone.broadcast(msg);
|
|
298
|
-
count += client.playersCount;
|
|
299
|
-
}
|
|
300
|
-
}
|
|
301
|
-
return Promise.resolve(count);
|
|
302
|
-
}
|
|
303
|
-
sendDataToRoommate(player, playerCode, data) {
|
|
304
|
-
let gameroom = player.getGameroom();
|
|
305
|
-
this.designContract(gameroom, 'Not in any gameroom');
|
|
306
|
-
let target = gameroom.getPlayer(playerCode);
|
|
307
|
-
this.designContract(target, 'Target player not in this gameroom');
|
|
308
|
-
return target.send(Message_1.Message.forDataToRoommate(player, data));
|
|
309
|
-
}
|
|
310
|
-
sendDataToRoomDecisionmaker(player, gameroomCode, data) {
|
|
311
|
-
let gameroom = this.getGameroom(gameroomCode);
|
|
312
|
-
this.designContract(gameroom, 'The gameroom is closed.');
|
|
313
|
-
let target = gameroom.getBrainer();
|
|
314
|
-
this.designContract(target, 'Decision maker not in the gameroom');
|
|
315
|
-
let senderRoom = player.getGameroom();
|
|
316
|
-
return target.send(Message_1.Message.forDataToRoomDecisionmaker(player, senderRoom ? senderRoom.code : '', gameroom.code, data));
|
|
317
|
-
}
|
|
318
|
-
setZonePlayerState(player, zoneCode, key, value) {
|
|
319
|
-
let gamezone = this.getGamezone(player.client, zoneCode);
|
|
320
|
-
this.designContract(gamezone, 'The zone does not exist.');
|
|
321
|
-
gamezone.setPlayerState(player, key, value);
|
|
322
|
-
return Promise.resolve(true);
|
|
323
|
-
}
|
|
324
|
-
setZonePlayerStates(player, zoneCode, states) {
|
|
325
|
-
let gamezone = this.getGamezone(player.client, zoneCode);
|
|
326
|
-
this.designContract(gamezone, 'The zone does not exist.');
|
|
327
|
-
gamezone.setPlayerStates(player, states);
|
|
328
|
-
return Promise.resolve(true);
|
|
329
|
-
}
|
|
330
|
-
setZonePlayerSynced(player, zoneCode, value, updateBrainer) {
|
|
331
|
-
let gamezone = this.getGamezone(player.client, zoneCode);
|
|
332
|
-
this.designContract(gamezone, 'The zone does not exist.');
|
|
333
|
-
return gamezone.setPlayerSynced(player, value, updateBrainer)
|
|
334
|
-
.then(() => gamezone.getBrainer().code);
|
|
335
|
-
}
|
|
336
|
-
getZonePlayerStates(player, zoneCode, playerCode) {
|
|
337
|
-
let gamezone = this.getGamezone(player.client, zoneCode);
|
|
338
|
-
this.designContract(gamezone, 'The zone does not exist.');
|
|
339
|
-
let target = gamezone.getPlayer(playerCode);
|
|
340
|
-
this.designContract(target, 'The player is not in the zone.');
|
|
341
|
-
return Promise.resolve(gamezone.getPlayerStates(target));
|
|
342
|
-
}
|
|
343
|
-
getZonePlayersStates(player, zoneCode) {
|
|
344
|
-
let gamezone = this.getGamezone(player.client, zoneCode);
|
|
345
|
-
this.designContract(gamezone, 'The zone does not exist.');
|
|
346
|
-
return Promise.resolve(gamezone.getPlayersStates());
|
|
347
|
-
}
|
|
348
|
-
setZoneStates(player, zoneCode, stateJson) {
|
|
349
|
-
let gamezone = this.getGamezone(player.client, zoneCode);
|
|
350
|
-
this.designContract(gamezone, 'The zone does not exist.');
|
|
351
|
-
this.designContract(gamezone.includesPlayer(player), 'You are not in the zone');
|
|
352
|
-
stateJson && ObjectUtil_1.ObjectUtil.safeAssign(gamezone.stateJson, stateJson);
|
|
353
|
-
gamezone.emit(GameroomBase_1.GameroomBase.EVENT.STATUS_CHANGED);
|
|
354
|
-
return Promise.resolve(gamezone);
|
|
355
|
-
}
|
|
356
|
-
getZoneStatistics(client, zoneCode) {
|
|
357
|
-
let statistics = {
|
|
358
|
-
code: zoneCode,
|
|
359
|
-
players: 0,
|
|
360
|
-
rooms: {
|
|
361
|
-
open: { count: 0, players: 0 },
|
|
362
|
-
locked: { count: 0, players: 0 },
|
|
363
|
-
over: { count: 0, players: 0 },
|
|
364
|
-
all: { count: 0, players: 0 }
|
|
365
|
-
}
|
|
366
|
-
};
|
|
367
|
-
let zone = this.getGamezone(client, zoneCode);
|
|
368
|
-
if (zone) {
|
|
369
|
-
statistics.players = zone.playersCount;
|
|
370
|
-
let rooms = zone.listAllGamerooms();
|
|
371
|
-
statistics.rooms.all.count = rooms.length;
|
|
372
|
-
for (let room of rooms) {
|
|
373
|
-
if (room.state == Gameroom_1.GameroomState.OPEN) {
|
|
374
|
-
++statistics.rooms.open.count;
|
|
375
|
-
statistics.rooms.open.players += room.playersCount;
|
|
376
|
-
}
|
|
377
|
-
else if (room.state == Gameroom_1.GameroomState.LOCKED) {
|
|
378
|
-
++statistics.rooms.locked.count;
|
|
379
|
-
statistics.rooms.locked.players += room.playersCount;
|
|
380
|
-
}
|
|
381
|
-
else if (room.state == Gameroom_1.GameroomState.OVER) {
|
|
382
|
-
++statistics.rooms.over.count;
|
|
383
|
-
statistics.rooms.over.players += room.playersCount;
|
|
384
|
-
}
|
|
385
|
-
statistics.rooms.all.players += room.playersCount;
|
|
386
|
-
}
|
|
387
|
-
}
|
|
388
|
-
return Promise.resolve(statistics);
|
|
389
|
-
}
|
|
390
|
-
}
|
|
391
|
-
exports.GameroomManager = GameroomManager;
|
|
392
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR2FtZXJvb21NYW5hZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3NlcnZlci9tYW5hZ2Vycy9HYW1lcm9vbU1hbmFnZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsc0RBQW1EO0FBQ25ELG1EQUFnRDtBQUdoRCxtREFBNkQ7QUFDN0QsNkRBQTBEO0FBQzFELHlEQUF3RTtBQUV4RSxxREFBa0Q7QUFDbEQscURBQWlFO0FBQ2pFLCtDQUE0QztBQUU1QyxvREFBaUQ7QUFFakQsTUFBYSxlQUFnQixTQUFRLHlCQUFXO0lBVTVDLFlBQW9CLE1BQTBCO1FBQzFDLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBRFQsV0FBTSxHQUFOLE1BQU0sQ0FBb0I7UUFSdEMsZ0JBQVcsR0FBZ0MsRUFBRSxDQUFDO1FBRXREOzs7V0FHRztRQUNLLGdCQUFXLEdBQW1ELEVBQUUsQ0FBQztJQUl6RSxDQUFDO0lBRU8sdUJBQXVCO1FBQzNCLElBQUksSUFBSSxHQUFXLHVCQUFVLENBQUMsb0JBQW9CLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDdkQsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQzNCLElBQUksR0FBRyx1QkFBVSxDQUFDLG9CQUFvQixDQUFDLEVBQUUsQ0FBQyxDQUFDO1NBQzlDO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVELFdBQVcsQ0FBQyxJQUFZO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBRUQsaUJBQWlCLENBQUMsUUFBZ0IsRUFBRSxJQUFZO1FBQzVDLEtBQUssSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUMvQixJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2xDLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxJ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
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.GameroomManager = void 0;
|
|
4
|
+
const ObjectUtil_1 = require("./../utils/ObjectUtil");
|
|
5
|
+
const ClientManager_1 = require("./ClientManager");
|
|
6
|
+
const Message_1 = require("./../messages/Message");
|
|
7
|
+
const GameroomBase_1 = require("./../entities/GameroomBase");
|
|
8
|
+
const ListFilter_1 = require("./../entities/ListFilter");
|
|
9
|
+
const Gamezone_1 = require("./../entities/Gamezone");
|
|
10
|
+
const Gameroom_1 = require("./../entities/Gameroom");
|
|
11
|
+
const ManagerBase_1 = require("./ManagerBase");
|
|
12
|
+
const StringUtil_1 = require("../utils/StringUtil");
|
|
13
|
+
class GameroomManager extends ManagerBase_1.ManagerBase {
|
|
14
|
+
constructor(server) {
|
|
15
|
+
super('GameroomManager');
|
|
16
|
+
this.server = server;
|
|
17
|
+
this.gameroomMap = {};
|
|
18
|
+
/**
|
|
19
|
+
* first key: client key
|
|
20
|
+
* second key: gameZone code
|
|
21
|
+
*/
|
|
22
|
+
this.gamezoneMap = {};
|
|
23
|
+
}
|
|
24
|
+
generateNewGameroomCode() {
|
|
25
|
+
let code = StringUtil_1.StringUtil.generateRandomString(10);
|
|
26
|
+
while (this.getGameroom(code)) {
|
|
27
|
+
code = StringUtil_1.StringUtil.generateRandomString(10);
|
|
28
|
+
}
|
|
29
|
+
return code;
|
|
30
|
+
}
|
|
31
|
+
getGameroom(code) {
|
|
32
|
+
return this.gameroomMap[code];
|
|
33
|
+
}
|
|
34
|
+
getGameroomByName(zoneCode, name) {
|
|
35
|
+
for (let code in this.gameroomMap) {
|
|
36
|
+
let room = this.gameroomMap[code];
|
|
37
|
+
if (room.name == name && room.gamezone.code == zoneCode) {
|
|
38
|
+
return room;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
return null;
|
|
42
|
+
}
|
|
43
|
+
getOrCreateGamezone(client, code) {
|
|
44
|
+
let zoneMap = this.gamezoneMap[client.key];
|
|
45
|
+
if (zoneMap) {
|
|
46
|
+
return zoneMap[code] || this.createGameZone(client, code);
|
|
47
|
+
}
|
|
48
|
+
else {
|
|
49
|
+
this.gamezoneMap[client.key] = {};
|
|
50
|
+
}
|
|
51
|
+
return this.createGameZone(client, code);
|
|
52
|
+
}
|
|
53
|
+
getGamezone(client, code) {
|
|
54
|
+
let zoneMap = this.gamezoneMap[client.key];
|
|
55
|
+
return zoneMap && zoneMap[code];
|
|
56
|
+
}
|
|
57
|
+
getClientZone(client) {
|
|
58
|
+
return this.getOrCreateGamezone(client, '/Sys/Ch');
|
|
59
|
+
}
|
|
60
|
+
createGameZone(client, code) {
|
|
61
|
+
let zone = new Gamezone_1.Gamezone(code, this.server, client);
|
|
62
|
+
this.gamezoneMap[client.key][code] = zone;
|
|
63
|
+
zone.once(GameroomBase_1.GameroomBase.EVENT.DISPOSED, () => {
|
|
64
|
+
delete this.gamezoneMap[client.key][code];
|
|
65
|
+
});
|
|
66
|
+
zone.on(GameroomBase_1.GameroomBase.EVENT.PLAYER_REMOVED, (p) => {
|
|
67
|
+
zone.broadcast(Message_1.Message.forPlayerLeftZone(zone.code, p.code));
|
|
68
|
+
});
|
|
69
|
+
zone.on(GameroomBase_1.GameroomBase.EVENT.STATUS_CHANGED, () => {
|
|
70
|
+
zone.broadcast(Message_1.Message.forZoneStatusChanged(zone));
|
|
71
|
+
});
|
|
72
|
+
zone.on(GameroomBase_1.GameroomBase.EVENT.PLAYER_STATE_CHANGED, (p, key, value) => {
|
|
73
|
+
zone.broadcast(Message_1.Message.forZonePlayerStateChanged(zone.code, p.code, key, value, zone.getBrainer().code));
|
|
74
|
+
});
|
|
75
|
+
zone.on(GameroomBase_1.GameroomBase.EVENT.PLAYER_STATES_CHANGED, (p, states) => {
|
|
76
|
+
zone.broadcast(Message_1.Message.forZonePlayerStatesChanged(zone.code, p.code, states, zone.getBrainer().code));
|
|
77
|
+
});
|
|
78
|
+
zone.on(GameroomBase_1.GameroomBase.EVENT.PLAYER_SYNCED_CHANGED, (p, value, brainerCode) => {
|
|
79
|
+
zone.broadcast(Message_1.Message.forZonePlayerSyncedChanged(zone.code, p.code, value, brainerCode));
|
|
80
|
+
});
|
|
81
|
+
return zone;
|
|
82
|
+
}
|
|
83
|
+
createOrJoinGameroom(player, gamezoneCode, gameroomName, password, maxPlayers, state, stateJson, allowGuest) {
|
|
84
|
+
let gameroom = this.getGameroomByName(gamezoneCode, gameroomName);
|
|
85
|
+
if (gameroom) {
|
|
86
|
+
return this.joinGameroom(player, gameroom.code, password);
|
|
87
|
+
}
|
|
88
|
+
else {
|
|
89
|
+
return this.createGameroom(player, gamezoneCode, gameroomName, password, maxPlayers, state, stateJson, allowGuest);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
createGameroom(player, gamezoneCode, gameroomName, password, maxPlayers, state, stateJson, allowGuest) {
|
|
93
|
+
this.designContract(!player.getGameroom(), 'Already in a gameroom');
|
|
94
|
+
let gamezone = this.getOrCreateGamezone(player.client, gamezoneCode);
|
|
95
|
+
let gameroom = new Gameroom_1.Gameroom(this.server, player.client, this.generateNewGameroomCode(), player, gamezone, gameroomName, password, maxPlayers, state, stateJson, allowGuest);
|
|
96
|
+
this.gameroomMap[gameroom.code] = gameroom;
|
|
97
|
+
gameroom.once(GameroomBase_1.GameroomBase.EVENT.DISPOSED, () => {
|
|
98
|
+
delete this.gameroomMap[gameroom.code];
|
|
99
|
+
gamezone.broadcast(Message_1.Message.forRoomClosed(gameroom));
|
|
100
|
+
});
|
|
101
|
+
gamezone.addGameroom(gameroom);
|
|
102
|
+
gameroom.addPlayer(player);
|
|
103
|
+
gamezone.broadcast(Message_1.Message.forRoomCreated(gameroom));
|
|
104
|
+
gameroom.on(GameroomBase_1.GameroomBase.EVENT.BRAINER_CHANGED, () => {
|
|
105
|
+
if (gameroom.getBrainer()) {
|
|
106
|
+
gameroom.broadcast(Message_1.Message.forRoomBrainerChanged(gameroom));
|
|
107
|
+
}
|
|
108
|
+
});
|
|
109
|
+
gameroom.on(GameroomBase_1.GameroomBase.EVENT.PLAYER_ADDED, (p) => {
|
|
110
|
+
gameroom.broadcast(Message_1.Message.forPlayerJoinedRoom(gameroom.code, p));
|
|
111
|
+
});
|
|
112
|
+
gameroom.on(GameroomBase_1.GameroomBase.EVENT.PLAYER_REMOVED, (p) => {
|
|
113
|
+
gameroom.broadcast(Message_1.Message.forPlayerLeftRoom(gameroom.code, p.code));
|
|
114
|
+
});
|
|
115
|
+
gameroom.on(GameroomBase_1.GameroomBase.EVENT.STATUS_CHANGED, () => {
|
|
116
|
+
gameroom.broadcast(Message_1.Message.forRoomStatusChanged(gameroom));
|
|
117
|
+
gamezone.broadcast(Message_1.Message.forRoomStatusChanged(gameroom));
|
|
118
|
+
});
|
|
119
|
+
gameroom.on(GameroomBase_1.GameroomBase.EVENT.PLAYER_STATE_CHANGED, (p, key, value) => {
|
|
120
|
+
gameroom.broadcast(Message_1.Message.forRoomPlayerStateChanged(gameroom.code, p.code, key, value));
|
|
121
|
+
});
|
|
122
|
+
gameroom.on(GameroomBase_1.GameroomBase.EVENT.PLAYER_STATES_CHANGED, (p, states) => {
|
|
123
|
+
gameroom.broadcast(Message_1.Message.forRoomPlayerStatesChanged(gameroom.code, p.code, states));
|
|
124
|
+
});
|
|
125
|
+
gameroom.on(GameroomBase_1.GameroomBase.EVENT.PLAYER_SYNCED_CHANGED, (p, value, brainerCode) => {
|
|
126
|
+
gameroom.broadcast(Message_1.Message.forRoomPlayerSyncedChanged(gameroom.code, p.code, value, brainerCode));
|
|
127
|
+
});
|
|
128
|
+
return Promise.resolve(gameroom);
|
|
129
|
+
}
|
|
130
|
+
joinGameroom(player, gameroomCode, password) {
|
|
131
|
+
this.designContract(!player.getGameroom(), 'Already in a gameroom');
|
|
132
|
+
let gameroom = this.getGameroom(gameroomCode);
|
|
133
|
+
this.designContract(gameroom, 'Gameroom not found');
|
|
134
|
+
this.designContract(gameroom.state == Gameroom_1.GameroomState.OPEN, 'The room is currently not open for joining.');
|
|
135
|
+
this.designContract(!gameroom.password || gameroom.password == password, 'Password not matched');
|
|
136
|
+
gameroom.addPlayer(player);
|
|
137
|
+
return Promise.resolve(gameroom);
|
|
138
|
+
}
|
|
139
|
+
leaveGameroom(player, gameroomCode) {
|
|
140
|
+
let gameroom = gameroomCode ? this.getGameroom(gameroomCode) : player.getGameroom();
|
|
141
|
+
this.designContract(gameroom, 'Gameroom not found');
|
|
142
|
+
gameroom.removePlayer(player);
|
|
143
|
+
return Promise.resolve(gameroom.code);
|
|
144
|
+
}
|
|
145
|
+
enterGamezone(player, gamezoneCode) {
|
|
146
|
+
let gamezone = this.getOrCreateGamezone(player.client, gamezoneCode);
|
|
147
|
+
gamezone.addPlayer(player);
|
|
148
|
+
return Promise.resolve(gamezone);
|
|
149
|
+
}
|
|
150
|
+
leaveGamezone(player, gamezoneCode) {
|
|
151
|
+
let gamezone = this.getGamezone(player.client, gamezoneCode);
|
|
152
|
+
if (gamezone) {
|
|
153
|
+
gamezone.removePlayer(player);
|
|
154
|
+
}
|
|
155
|
+
return Promise.resolve(true);
|
|
156
|
+
}
|
|
157
|
+
queryGameroom(player, gameroomCode) {
|
|
158
|
+
let gameroom = this.getGameroom(gameroomCode);
|
|
159
|
+
this.designContract(gameroom, 'The gameroom is closed.');
|
|
160
|
+
this.designContract(gameroom.client == player.client, 'The gameroom is not in your current game.');
|
|
161
|
+
return Promise.resolve(gameroom);
|
|
162
|
+
}
|
|
163
|
+
listGamerooms(client, gamezoneCode, length, filter) {
|
|
164
|
+
length = Math.min(100, length);
|
|
165
|
+
let gamezone = this.getGamezone(client, gamezoneCode);
|
|
166
|
+
if (gamezone) {
|
|
167
|
+
return Promise.resolve(gamezone.listGamerooms((0, ListFilter_1.parsePropFilter)(filter), length));
|
|
168
|
+
}
|
|
169
|
+
else {
|
|
170
|
+
return Promise.resolve([]);
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
listPlayersInGameroom(player) {
|
|
174
|
+
let gameroom = player.getGameroom();
|
|
175
|
+
this.designContract(gameroom, 'Not in any gameroom');
|
|
176
|
+
return Promise.resolve(gameroom.listPlayers());
|
|
177
|
+
}
|
|
178
|
+
listPlayersOfGameroom(_player, gameroomCode) {
|
|
179
|
+
let gameroom = this.getGameroom(gameroomCode);
|
|
180
|
+
this.designContract(gameroom, 'The gameroom is closed.');
|
|
181
|
+
return Promise.resolve(gameroom.listPlayers());
|
|
182
|
+
}
|
|
183
|
+
setGameroomState(player, state, stateJson) {
|
|
184
|
+
let gameroom = player.getGameroom();
|
|
185
|
+
this.designContract(gameroom, 'Not in any gameroom');
|
|
186
|
+
this.designContract(gameroom.getBrainer() == player, 'Not the decision maker.');
|
|
187
|
+
gameroom.state = state;
|
|
188
|
+
stateJson && ObjectUtil_1.ObjectUtil.safeAssign(gameroom.stateJson, stateJson);
|
|
189
|
+
gameroom.emit(GameroomBase_1.GameroomBase.EVENT.STATUS_CHANGED);
|
|
190
|
+
return Promise.resolve(gameroom);
|
|
191
|
+
}
|
|
192
|
+
setGameroomStateJson(player, stateJson) {
|
|
193
|
+
let gameroom = player.getGameroom();
|
|
194
|
+
this.designContract(gameroom, 'Not in any gameroom');
|
|
195
|
+
this.designContract(gameroom.getBrainer() == player, 'Not the decision maker.');
|
|
196
|
+
stateJson && ObjectUtil_1.ObjectUtil.safeAssign(gameroom.stateJson, stateJson);
|
|
197
|
+
gameroom.emit(GameroomBase_1.GameroomBase.EVENT.STATUS_CHANGED);
|
|
198
|
+
return Promise.resolve(gameroom);
|
|
199
|
+
}
|
|
200
|
+
setRoomPlayerState(player, key, value) {
|
|
201
|
+
let gameroom = player.getGameroom();
|
|
202
|
+
this.designContract(gameroom, 'Not in any gameroom');
|
|
203
|
+
gameroom.setPlayerState(player, key, value);
|
|
204
|
+
return Promise.resolve(true);
|
|
205
|
+
}
|
|
206
|
+
setRoomPlayerStates(player, states) {
|
|
207
|
+
let gameroom = player.getGameroom();
|
|
208
|
+
this.designContract(gameroom, 'Not in any gameroom');
|
|
209
|
+
gameroom.setPlayerStates(player, states);
|
|
210
|
+
return Promise.resolve(true);
|
|
211
|
+
}
|
|
212
|
+
setRoomPlayerSynced(player, value, updateBrainer) {
|
|
213
|
+
let gameroom = player.getGameroom();
|
|
214
|
+
this.designContract(gameroom, 'Not in any gameroom');
|
|
215
|
+
return gameroom.setPlayerSynced(player, value, updateBrainer)
|
|
216
|
+
.then(() => gameroom.getBrainer().code);
|
|
217
|
+
}
|
|
218
|
+
updateRoomBrainer(player) {
|
|
219
|
+
let gameroom = player.getGameroom();
|
|
220
|
+
this.designContract(gameroom, 'Not in any gameroom');
|
|
221
|
+
this.designContract(gameroom.getBrainer() == player, 'Not the decision maker.');
|
|
222
|
+
return gameroom.updateBrainer(true)
|
|
223
|
+
.then(brainer => brainer.code);
|
|
224
|
+
}
|
|
225
|
+
broadcastToRoom(player, gameroomCode, data) {
|
|
226
|
+
let gameroom = this.getGameroom(gameroomCode);
|
|
227
|
+
this.designContract(gameroom, 'The gameroom is closed.');
|
|
228
|
+
gameroom.broadcastByPlayer(Message_1.Message.forBroadcast(Message_1.MessageType.BROADCAST_TO_ROOM, player.code, gameroom.code, data), player);
|
|
229
|
+
return Promise.resolve(gameroom.playersCount);
|
|
230
|
+
}
|
|
231
|
+
broadcastToRoom2(player, gameroomCode, data) {
|
|
232
|
+
let gameroom = this.getGameroom(gameroomCode);
|
|
233
|
+
this.designContract(gameroom, 'The gameroom is closed.');
|
|
234
|
+
gameroom.broadcastByPlayer(Message_1.Message.forBroadcast(Message_1.MessageType.BROADCAST_TO_ROOM, player.code, gameroom.code, data), player);
|
|
235
|
+
return Promise.resolve({
|
|
236
|
+
p: gameroom.playersCount,
|
|
237
|
+
t: Date.now(),
|
|
238
|
+
});
|
|
239
|
+
}
|
|
240
|
+
broadcastInRoom(player, data) {
|
|
241
|
+
let gameroom = player.getGameroom();
|
|
242
|
+
this.designContract(gameroom, 'Not in any gameroom');
|
|
243
|
+
gameroom.broadcastByPlayer(Message_1.Message.forBroadcast(Message_1.MessageType.BROADCAST_IN_ROOM, player.code, gameroom.code, data), player);
|
|
244
|
+
return Promise.resolve(gameroom.playersCount);
|
|
245
|
+
}
|
|
246
|
+
broadcastInRoom2(player, data) {
|
|
247
|
+
let gameroom = player.getGameroom();
|
|
248
|
+
this.designContract(gameroom, 'Not in any gameroom');
|
|
249
|
+
gameroom.broadcastByPlayer(Message_1.Message.forBroadcast(Message_1.MessageType.BROADCAST_IN_ROOM, player.code, gameroom.code, data), player);
|
|
250
|
+
return Promise.resolve({
|
|
251
|
+
p: gameroom.playersCount,
|
|
252
|
+
t: Date.now(),
|
|
253
|
+
});
|
|
254
|
+
}
|
|
255
|
+
broadcastToZone(player, gamezoneCode, data) {
|
|
256
|
+
let gamezone = this.getGamezone(player.client, gamezoneCode);
|
|
257
|
+
if (gamezone) {
|
|
258
|
+
gamezone.broadcastByPlayer(Message_1.Message.forBroadcast(Message_1.MessageType.BROADCAST_TO_ZONE, player.code, gamezone.code, data), player);
|
|
259
|
+
return Promise.resolve(gamezone.playersCount);
|
|
260
|
+
}
|
|
261
|
+
else {
|
|
262
|
+
return Promise.resolve(0);
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
broadcastToZone2(player, gamezoneCode, data) {
|
|
266
|
+
let gamezone = this.getGamezone(player.client, gamezoneCode);
|
|
267
|
+
if (gamezone) {
|
|
268
|
+
gamezone.broadcastByPlayer(Message_1.Message.forBroadcast(Message_1.MessageType.BROADCAST_TO_ZONE, player.code, gamezone.code, data), player);
|
|
269
|
+
return Promise.resolve({
|
|
270
|
+
p: gamezone.playersCount,
|
|
271
|
+
t: Date.now(),
|
|
272
|
+
});
|
|
273
|
+
}
|
|
274
|
+
else {
|
|
275
|
+
return Promise.resolve({
|
|
276
|
+
p: 0,
|
|
277
|
+
t: Date.now(),
|
|
278
|
+
});
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
broadcastInProject(monitor, project, data) {
|
|
282
|
+
let msg = Message_1.Message.forBroadcast(Message_1.MessageType.BROADCAST_IN_PROJECT, monitor.code, '', data);
|
|
283
|
+
let count = 0;
|
|
284
|
+
for (let client of project.listClients()) {
|
|
285
|
+
let gamezone = this.getClientZone(client);
|
|
286
|
+
gamezone.broadcast(msg);
|
|
287
|
+
count += client.playersCount;
|
|
288
|
+
}
|
|
289
|
+
return Promise.resolve(count);
|
|
290
|
+
}
|
|
291
|
+
broadcastInGamelet(monitor, data) {
|
|
292
|
+
let msg = Message_1.Message.forBroadcast(Message_1.MessageType.BROADCAST_IN_GAMELET, monitor.code, '', data);
|
|
293
|
+
let count = 0;
|
|
294
|
+
for (let project of ClientManager_1.clientManager.listProjects()) {
|
|
295
|
+
for (let client of project.listClients()) {
|
|
296
|
+
let gamezone = this.getClientZone(client);
|
|
297
|
+
gamezone.broadcast(msg);
|
|
298
|
+
count += client.playersCount;
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
return Promise.resolve(count);
|
|
302
|
+
}
|
|
303
|
+
sendDataToRoommate(player, playerCode, data) {
|
|
304
|
+
let gameroom = player.getGameroom();
|
|
305
|
+
this.designContract(gameroom, 'Not in any gameroom');
|
|
306
|
+
let target = gameroom.getPlayer(playerCode);
|
|
307
|
+
this.designContract(target, 'Target player not in this gameroom');
|
|
308
|
+
return target.send(Message_1.Message.forDataToRoommate(player, data));
|
|
309
|
+
}
|
|
310
|
+
sendDataToRoomDecisionmaker(player, gameroomCode, data) {
|
|
311
|
+
let gameroom = this.getGameroom(gameroomCode);
|
|
312
|
+
this.designContract(gameroom, 'The gameroom is closed.');
|
|
313
|
+
let target = gameroom.getBrainer();
|
|
314
|
+
this.designContract(target, 'Decision maker not in the gameroom');
|
|
315
|
+
let senderRoom = player.getGameroom();
|
|
316
|
+
return target.send(Message_1.Message.forDataToRoomDecisionmaker(player, senderRoom ? senderRoom.code : '', gameroom.code, data));
|
|
317
|
+
}
|
|
318
|
+
setZonePlayerState(player, zoneCode, key, value) {
|
|
319
|
+
let gamezone = this.getGamezone(player.client, zoneCode);
|
|
320
|
+
this.designContract(gamezone, 'The zone does not exist.');
|
|
321
|
+
gamezone.setPlayerState(player, key, value);
|
|
322
|
+
return Promise.resolve(true);
|
|
323
|
+
}
|
|
324
|
+
setZonePlayerStates(player, zoneCode, states) {
|
|
325
|
+
let gamezone = this.getGamezone(player.client, zoneCode);
|
|
326
|
+
this.designContract(gamezone, 'The zone does not exist.');
|
|
327
|
+
gamezone.setPlayerStates(player, states);
|
|
328
|
+
return Promise.resolve(true);
|
|
329
|
+
}
|
|
330
|
+
setZonePlayerSynced(player, zoneCode, value, updateBrainer) {
|
|
331
|
+
let gamezone = this.getGamezone(player.client, zoneCode);
|
|
332
|
+
this.designContract(gamezone, 'The zone does not exist.');
|
|
333
|
+
return gamezone.setPlayerSynced(player, value, updateBrainer)
|
|
334
|
+
.then(() => gamezone.getBrainer().code);
|
|
335
|
+
}
|
|
336
|
+
getZonePlayerStates(player, zoneCode, playerCode) {
|
|
337
|
+
let gamezone = this.getGamezone(player.client, zoneCode);
|
|
338
|
+
this.designContract(gamezone, 'The zone does not exist.');
|
|
339
|
+
let target = gamezone.getPlayer(playerCode);
|
|
340
|
+
this.designContract(target, 'The player is not in the zone.');
|
|
341
|
+
return Promise.resolve(gamezone.getPlayerStates(target));
|
|
342
|
+
}
|
|
343
|
+
getZonePlayersStates(player, zoneCode) {
|
|
344
|
+
let gamezone = this.getGamezone(player.client, zoneCode);
|
|
345
|
+
this.designContract(gamezone, 'The zone does not exist.');
|
|
346
|
+
return Promise.resolve(gamezone.getPlayersStates());
|
|
347
|
+
}
|
|
348
|
+
setZoneStates(player, zoneCode, stateJson) {
|
|
349
|
+
let gamezone = this.getGamezone(player.client, zoneCode);
|
|
350
|
+
this.designContract(gamezone, 'The zone does not exist.');
|
|
351
|
+
this.designContract(gamezone.includesPlayer(player), 'You are not in the zone');
|
|
352
|
+
stateJson && ObjectUtil_1.ObjectUtil.safeAssign(gamezone.stateJson, stateJson);
|
|
353
|
+
gamezone.emit(GameroomBase_1.GameroomBase.EVENT.STATUS_CHANGED);
|
|
354
|
+
return Promise.resolve(gamezone);
|
|
355
|
+
}
|
|
356
|
+
getZoneStatistics(client, zoneCode) {
|
|
357
|
+
let statistics = {
|
|
358
|
+
code: zoneCode,
|
|
359
|
+
players: 0,
|
|
360
|
+
rooms: {
|
|
361
|
+
open: { count: 0, players: 0 },
|
|
362
|
+
locked: { count: 0, players: 0 },
|
|
363
|
+
over: { count: 0, players: 0 },
|
|
364
|
+
all: { count: 0, players: 0 }
|
|
365
|
+
}
|
|
366
|
+
};
|
|
367
|
+
let zone = this.getGamezone(client, zoneCode);
|
|
368
|
+
if (zone) {
|
|
369
|
+
statistics.players = zone.playersCount;
|
|
370
|
+
let rooms = zone.listAllGamerooms();
|
|
371
|
+
statistics.rooms.all.count = rooms.length;
|
|
372
|
+
for (let room of rooms) {
|
|
373
|
+
if (room.state == Gameroom_1.GameroomState.OPEN) {
|
|
374
|
+
++statistics.rooms.open.count;
|
|
375
|
+
statistics.rooms.open.players += room.playersCount;
|
|
376
|
+
}
|
|
377
|
+
else if (room.state == Gameroom_1.GameroomState.LOCKED) {
|
|
378
|
+
++statistics.rooms.locked.count;
|
|
379
|
+
statistics.rooms.locked.players += room.playersCount;
|
|
380
|
+
}
|
|
381
|
+
else if (room.state == Gameroom_1.GameroomState.OVER) {
|
|
382
|
+
++statistics.rooms.over.count;
|
|
383
|
+
statistics.rooms.over.players += room.playersCount;
|
|
384
|
+
}
|
|
385
|
+
statistics.rooms.all.players += room.playersCount;
|
|
386
|
+
}
|
|
387
|
+
}
|
|
388
|
+
return Promise.resolve(statistics);
|
|
389
|
+
}
|
|
390
|
+
}
|
|
391
|
+
exports.GameroomManager = GameroomManager;
|
|
392
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR2FtZXJvb21NYW5hZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3NlcnZlci9tYW5hZ2Vycy9HYW1lcm9vbU1hbmFnZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsc0RBQW1EO0FBQ25ELG1EQUFnRDtBQUdoRCxtREFBNkQ7QUFDN0QsNkRBQTBEO0FBQzFELHlEQUF3RTtBQUV4RSxxREFBa0Q7QUFDbEQscURBQWlFO0FBQ2pFLCtDQUE0QztBQUU1QyxvREFBaUQ7QUFFakQsTUFBYSxlQUFnQixTQUFRLHlCQUFXO0lBVTVDLFlBQW9CLE1BQTBCO1FBQzFDLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBRFQsV0FBTSxHQUFOLE1BQU0sQ0FBb0I7UUFSdEMsZ0JBQVcsR0FBZ0MsRUFBRSxDQUFDO1FBRXREOzs7V0FHRztRQUNLLGdCQUFXLEdBQW1ELEVBQUUsQ0FBQztJQUl6RSxDQUFDO0lBRU8sdUJBQXVCO1FBQzNCLElBQUksSUFBSSxHQUFXLHVCQUFVLENBQUMsb0JBQW9CLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDdkQsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDNUIsSUFBSSxHQUFHLHVCQUFVLENBQUMsb0JBQW9CLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDL0MsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxXQUFXLENBQUMsSUFBWTtRQUNwQixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUVELGlCQUFpQixDQUFDLFFBQWdCLEVBQUUsSUFBWTtRQUM1QyxLQUFLLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNoQyxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2xDLElBQUksSUFBSSxD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
|