gamelet-cli 0.3.23 → 0.3.24

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.
Files changed (52) hide show
  1. package/build/package.json +1 -2
  2. package/build/src/gamelet/download.js +730 -0
  3. package/build/src/gamelet/merges.js +106 -0
  4. package/build/src/gamelet/prepare.js +275 -0
  5. package/build/src/gamelet/upload.js +279 -0
  6. package/build/src/index.js +86 -0
  7. package/build/src/server/Constant.js +10 -0
  8. package/build/src/server/entities/Client.js +57 -0
  9. package/build/src/server/entities/ClientOwner.js +67 -0
  10. package/build/src/server/entities/ClientProject.js +68 -0
  11. package/build/src/server/entities/Gameroom.js +88 -0
  12. package/build/src/server/entities/GameroomBase.js +244 -0
  13. package/build/src/server/entities/Gamezone.js +73 -0
  14. package/build/src/server/entities/ListFilter.js +193 -0
  15. package/build/src/server/entities/Monitor.js +81 -0
  16. package/build/src/server/entities/Player.js +132 -0
  17. package/build/src/server/managers/ClientManager.js +61 -0
  18. package/build/src/server/managers/Database.js +591 -0
  19. package/build/src/server/managers/GameroomManager.js +392 -0
  20. package/build/src/server/managers/ManagerBase.js +17 -0
  21. package/build/src/server/managers/MonitorManager.js +73 -0
  22. package/build/src/server/managers/PlayerManager.js +104 -0
  23. package/build/src/server/managers/SocketManager.js +50 -0
  24. package/build/src/server/managers/UserManager.js +58 -0
  25. package/build/src/server/messages/Message.js +141 -0
  26. package/build/src/server/server.js +110 -0
  27. package/build/src/server/services/ServiceBase.js +25 -0
  28. package/build/src/server/services/clientService.js +16 -0
  29. package/build/src/server/services/gameroomService.js +122 -0
  30. package/build/src/server/services/gltserver.service.js +24 -0
  31. package/build/src/server/services/playerService.js +30 -0
  32. package/build/src/server/startServer.js +31 -0
  33. package/build/src/server/types/BadgeStatus.js +25 -0
  34. package/build/src/server/types/OrderType.js +38 -0
  35. package/build/src/server/types/SubmitType.js +24 -0
  36. package/build/src/server/types/TimeRange.js +26 -0
  37. package/build/src/server/utils/ArrayUtil.js +126 -0
  38. package/build/src/server/utils/IntUtil.js +10 -0
  39. package/build/src/server/utils/ObjectUtil.js +191 -0
  40. package/build/src/server/utils/StringUtil.js +37 -0
  41. package/build/src/server/vo/Database.js +1 -0
  42. package/build/src/server/vo/Gameroom.js +1 -0
  43. package/build/src/server/vo/Gamezone.js +1 -0
  44. package/build/src/server/vo/Player.js +1 -0
  45. package/build/src/server/vo/Response.js +1 -0
  46. package/build/src/server/vo/System.js +1 -0
  47. package/build/src/utils/cli.js +49 -0
  48. package/build/src/utils/file.js +327 -0
  49. package/build/src/utils/init.js +42 -0
  50. package/build/src/utils/log.js +17 -0
  51. package/build/src/utils/net.js +39 -0
  52. package/package.json +1 -2
@@ -0,0 +1,88 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Gameroom = exports.GameroomState = void 0;
4
+ const GameroomBase_1 = require("./GameroomBase");
5
+ var GameroomState;
6
+ (function (GameroomState) {
7
+ GameroomState[GameroomState["OPEN"] = 0] = "OPEN";
8
+ GameroomState[GameroomState["LOCKED"] = 1] = "LOCKED";
9
+ GameroomState[GameroomState["OVER"] = 2] = "OVER";
10
+ })(GameroomState = exports.GameroomState || (exports.GameroomState = {}));
11
+ class Gameroom extends GameroomBase_1.GameroomBase {
12
+ constructor(server, client, code, creator, gamezone, name, password, maxPlayers, state, stateJson, allowGuest) {
13
+ super('gameroom', code, server, client, stateJson);
14
+ this.creator = creator;
15
+ this.gamezone = gamezone;
16
+ this.name = name;
17
+ this.password = password;
18
+ this.maxPlayers = maxPlayers;
19
+ this.state = state;
20
+ this.allowGuest = allowGuest;
21
+ this.brainer = creator;
22
+ }
23
+ get monitorChannel() {
24
+ return `(room) ${this.code}`;
25
+ }
26
+ dispose() {
27
+ this.gamezone.removeGameroom(this);
28
+ super.dispose();
29
+ }
30
+ addPlayer(player) {
31
+ if (this.playersCount >= this.maxPlayers) {
32
+ throw new Error('The number of players has reached the limit of the gameroom size.');
33
+ }
34
+ if (super.addPlayer(player)) {
35
+ player.setGameroom(this);
36
+ return true;
37
+ }
38
+ return false;
39
+ }
40
+ removePlayer(player) {
41
+ if (player.getGameroom() == this) {
42
+ player.setGameroom(null);
43
+ }
44
+ if (super.removePlayer(player)) {
45
+ if (!this.playersCount) {
46
+ this.dispose();
47
+ }
48
+ return true;
49
+ }
50
+ return false;
51
+ }
52
+ toVo() {
53
+ const json = {
54
+ code: this.code,
55
+ creator: this.creator.toVo(),
56
+ name: this.name,
57
+ zoneCode: this.gamezone.code,
58
+ maxPlayers: this.maxPlayers,
59
+ allowGuest: this.allowGuest,
60
+ createTime: this.createTime,
61
+ };
62
+ this.password && (json.pwd = 1);
63
+ return json;
64
+ }
65
+ toStatusVo() {
66
+ return {
67
+ state: this.state,
68
+ stateJson: this.stateJson,
69
+ players: this.playersCount
70
+ };
71
+ }
72
+ toAndStatusVo() {
73
+ return {
74
+ room: this.toVo(),
75
+ status: this.toStatusVo()
76
+ };
77
+ }
78
+ toFullVo() {
79
+ return {
80
+ room: this.toVo(),
81
+ status: this.toStatusVo(),
82
+ brainer: this.getBrainer().code,
83
+ playerStates: this.playerStates
84
+ };
85
+ }
86
+ }
87
+ exports.Gameroom = Gameroom;
88
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR2FtZXJvb20uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvc2VydmVyL2VudGl0aWVzL0dhbWVyb29tLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUVBLGlEQUE4QztBQUc5QyxJQUFZLGFBSVg7QUFKRCxXQUFZLGFBQWE7SUFDckIsaURBQUksQ0FBQTtJQUNKLHFEQUFNLENBQUE7SUFDTixpREFBSSxDQUFBO0FBQ1IsQ0FBQyxFQUpXLGFBQWEsR0FBYixxQkFBYSxLQUFiLHFCQUFhLFFBSXhCO0FBRUQsTUFBYSxRQUFTLFNBQVEsMkJBQVk7SUFFdEMsWUFDSSxNQUEwQixFQUMxQixNQUFjLEVBQ2QsSUFBWSxFQUNMLE9BQWUsRUFDZixRQUFrQixFQUNsQixJQUFZLEVBQ1osUUFBZ0IsRUFDaEIsVUFBa0IsRUFDbEIsS0FBb0IsRUFDM0IsU0FBaUMsRUFDMUIsVUFBbUI7UUFFMUIsS0FBSyxDQUFDLFVBQVUsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxTQUFTLENBQUMsQ0FBQztRQVQ1QyxZQUFPLEdBQVAsT0FBTyxDQUFRO1FBQ2YsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUNsQixTQUFJLEdBQUosSUFBSSxDQUFRO1FBQ1osYUFBUSxHQUFSLFFBQVEsQ0FBUTtRQUNoQixlQUFVLEdBQVYsVUFBVSxDQUFRO1FBQ2xCLFVBQUssR0FBTCxLQUFLLENBQWU7UUFFcEIsZUFBVSxHQUFWLFVBQVUsQ0FBUztRQUcxQixJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztJQUMzQixDQUFDO0lBRUQsSUFBSSxjQUFjO1FBQ2QsT0FBTyxVQUFVLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQTtJQUNoQyxDQUFDO0lBRUQsT0FBTztRQUNILElBQUksQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ25DLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUNwQixDQUFDO0lBRUQsU0FBUyxDQUFDLE1BQWM7UUFDcEIsSUFBSSxJQUFJLENBQUMsWUFBWSxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDdEMsTUFBTSxJQUFJLEtBQUssQ0FBQyxtRUFBbUUsQ0FBQyxDQUFBO1NBQ3ZGO1FBQ0QsSUFBSSxLQUFLLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ3pCLE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDekIsT0FBTyxJQUFJLENBQUM7U0FDZjtRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7SUFFRCxZQUFZLENBQUMsTUFBYztRQUN2QixJQUFJLE1BQU0sQ0FBQyxXQUFXLEVBQUUsSUFBSSxJQUFJLEVBQUU7WUFDOUIsTUFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUM1QjtRQUNELElBQUksS0FBSyxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUM1QixJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRTtnQkFDcEIsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO2FBQ2xCO1lBQ0QsT0FBTyxJQUFJLENBQUM7U0FDZjtRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7SUFFRCxJQUFJO1FBQ0EsTUFBTSxJQUFJLEdBQVE7WUFDZCxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7WUFDZixPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUU7WUFDNUIsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO1lBQ2YsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSTtZQUM1QixVQUFVLEVBQUUsSUFBSSxDQUFDLFVBQVU7WUFDM0IsVUFBVSxFQUFFLElBQUksQ0FBQyxVQUFVO1lBQzNCLFVBQVUsRUFBRSxJQUFJLENBQUMsVUFBVTtTQUM5QixDQUFBO1FBQ0QsSUFBSSxDQUFDLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDaEMsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVELFVBQVU7UUFDTixPQUFPO1lBQ0gsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLO1lBQ2pCLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUztZQUN6QixPQUFPLEVBQUUsSUFBSSxDQUFDLFlBQVk7U0FDN0IsQ0FBQTtJQUNMLENBQUM7SUFFRCxhQUFhO1FBQ1QsT0FBTztZQUNILElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFO1lBQ2pCLE1BQU0sRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFO1NBQzVCLENBQUE7SUFDTCxDQUFDO0lBRUQsUUFBUTtRQUNKLE9BQU87WUFDSCxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRTtZQUNqQixNQUFNLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUN6QixPQUFPLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLElBQUk7WUFDL0IsWUFBWSxFQUFFLElBQUksQ0FBQyxZQUFZO1NBQ2xDLENBQUE7SUFDTCxDQUFDO0NBQ0o7QUF6RkQsNEJBeUZDIn0=
@@ -0,0 +1,244 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.GameroomBase = void 0;
4
+ const Message_1 = require("../messages/Message");
5
+ const ArrayUtil_1 = require("./../utils/ArrayUtil");
6
+ const events_1 = require("events");
7
+ const MonitorManager_1 = require("../managers/MonitorManager");
8
+ class GameroomBase extends events_1.EventEmitter {
9
+ constructor(roomType, code, server, client, stateJson) {
10
+ super();
11
+ this.roomType = roomType;
12
+ this.code = code;
13
+ this.server = server;
14
+ this.client = client;
15
+ this.stateJson = stateJson;
16
+ this.players = [];
17
+ // private states for each player, playerCode: object
18
+ this.playerStates = {};
19
+ this.createTime = Math.floor(Date.now() / 1000);
20
+ this.stateJson = this.stateJson || {};
21
+ }
22
+ get monitorChannel() {
23
+ return this.code;
24
+ }
25
+ dispose() {
26
+ this.listPlayers().forEach(player => this.removePlayer(player));
27
+ this.emit(GameroomBase.EVENT.DISPOSED);
28
+ MonitorManager_1.monitorManager.log(this.client.project.code, this.monitorChannel, this.roomType + ' disposed', this.code);
29
+ }
30
+ setPlayerSynced(player, value, updateBrainer) {
31
+ let promise;
32
+ if (this.setPlayerState(player, 'synced', value, false)) {
33
+ if (updateBrainer) {
34
+ promise = this.updateBrainer(true);
35
+ }
36
+ }
37
+ return (promise || Promise.resolve()).then(() => {
38
+ this.emit(GameroomBase.EVENT.PLAYER_SYNCED_CHANGED, player, value, this.brainer.code);
39
+ });
40
+ }
41
+ isPlayerSynced(player) {
42
+ return !!this.getPlayerState(player, 'synced');
43
+ }
44
+ setPlayerState(player, key, value, emitEvent = true) {
45
+ if (this.players.includes(player)) {
46
+ let states = this.playerStates[player.code];
47
+ if (!states) {
48
+ this.playerStates[player.code] = states = {};
49
+ }
50
+ if (this._setPlayerState(states, key, value)) {
51
+ emitEvent && this.emit(GameroomBase.EVENT.PLAYER_STATE_CHANGED, player, key, value);
52
+ return true;
53
+ }
54
+ }
55
+ else {
56
+ throw new Error('Tried to set player state of a player who is not in this ' + this.roomType);
57
+ }
58
+ return false;
59
+ }
60
+ _setPlayerState(states, key, value) {
61
+ if (states[key] !== value) {
62
+ if (value === undefined || value === null) {
63
+ value = null;
64
+ delete states[key];
65
+ }
66
+ else {
67
+ states[key] = value;
68
+ }
69
+ return true;
70
+ }
71
+ return false;
72
+ }
73
+ setPlayerStates(player, newStates) {
74
+ if (this.players.includes(player)) {
75
+ let result = false;
76
+ if (newStates) {
77
+ let states = this.playerStates[player.code];
78
+ if (!states) {
79
+ this.playerStates[player.code] = states = {};
80
+ }
81
+ for (let key in newStates) {
82
+ if (this._setPlayerState(states, key, newStates[key])) {
83
+ result = true;
84
+ }
85
+ }
86
+ }
87
+ else if (this.playerStates[player.code]) {
88
+ result = true;
89
+ this.deletePlayerState(player);
90
+ }
91
+ if (result) {
92
+ this.emit(GameroomBase.EVENT.PLAYER_STATES_CHANGED, player, newStates);
93
+ }
94
+ }
95
+ else {
96
+ throw new Error('Tried to set player state of a player who is not in this ' + this.roomType);
97
+ }
98
+ return false;
99
+ }
100
+ getPlayer(code) {
101
+ return this.players.find(p => p.code == code);
102
+ }
103
+ includesPlayer(player) {
104
+ return this.players.includes(player);
105
+ }
106
+ getPlayerState(player, key) {
107
+ let state = this.playerStates[player.code];
108
+ return state && state[key];
109
+ }
110
+ getPlayerStates(player) {
111
+ return this.playerStates[player.code];
112
+ }
113
+ deletePlayerState(player) {
114
+ if (this.playerStates[player.code]) {
115
+ delete this.playerStates[player.code];
116
+ return true;
117
+ }
118
+ else {
119
+ return false;
120
+ }
121
+ }
122
+ listPlayers() {
123
+ return this.players.slice();
124
+ }
125
+ getPlayersStates() {
126
+ return this.playerStates;
127
+ }
128
+ get playersCount() {
129
+ return this.players.length;
130
+ }
131
+ get socketChannel() {
132
+ return this.code;
133
+ }
134
+ addPlayer(player) {
135
+ if (ArrayUtil_1.ArrayUtil.addUniqueElement(this.players, player)) {
136
+ if (!this.brainer) {
137
+ this.updateBrainer(false);
138
+ }
139
+ player.socket.join(this.socketChannel);
140
+ this.emit(GameroomBase.EVENT.PLAYER_ADDED, player);
141
+ this.emit(GameroomBase.EVENT.STATUS_CHANGED);
142
+ return true;
143
+ }
144
+ return false;
145
+ }
146
+ removePlayer(player) {
147
+ if (ArrayUtil_1.ArrayUtil.removeElement(this.players, player)) {
148
+ player.socket.leave(this.socketChannel);
149
+ if (this.deletePlayerState(player)) {
150
+ this.emit(GameroomBase.EVENT.PLAYER_STATES_CHANGED, player, null);
151
+ }
152
+ if (player == this.brainer) {
153
+ // must do this before we send playerLeft event
154
+ this.updateBrainer(false);
155
+ }
156
+ this.emit(GameroomBase.EVENT.STATUS_CHANGED);
157
+ this.emit(GameroomBase.EVENT.PLAYER_REMOVED, player);
158
+ return true;
159
+ }
160
+ return false;
161
+ }
162
+ setBrainerByPlayer(playerCode, needPreset) {
163
+ let brainer = this.players.find(p => p.code == playerCode);
164
+ if (!brainer) {
165
+ throw new Error('The player is not in room.');
166
+ }
167
+ return this._setBrainer(brainer, needPreset);
168
+ }
169
+ updateBrainer(needPreset) {
170
+ return this._setBrainer(this.chooseBrainer(), needPreset);
171
+ }
172
+ _setBrainer(brainer, needPreset) {
173
+ if (brainer != this.brainer) {
174
+ if (needPreset) {
175
+ return brainer.send(Message_1.Message.forRoomBrainerSet(this.code))
176
+ .then(() => {
177
+ this.brainer = brainer;
178
+ this.emit(GameroomBase.EVENT.BRAINER_CHANGED);
179
+ return this.brainer;
180
+ });
181
+ }
182
+ else {
183
+ this.brainer = brainer;
184
+ this.emit(GameroomBase.EVENT.BRAINER_CHANGED);
185
+ }
186
+ }
187
+ return Promise.resolve(this.brainer);
188
+ }
189
+ chooseBrainer() {
190
+ if (this.players.length) {
191
+ let idleStart = Date.now() - 10000;
192
+ let brainer = this.players[0];
193
+ let bestDelay = this.calcNetworkDelayValue(brainer, idleStart);
194
+ for (let i = this.players.length - 1; i > 0; --i) {
195
+ let player = this.players[i];
196
+ if (this.isPlayerSynced(player)) {
197
+ let delay = this.calcNetworkDelayValue(player, idleStart);
198
+ if (player.cheats) {
199
+ delay += 500;
200
+ }
201
+ if (delay < bestDelay) {
202
+ brainer = player;
203
+ bestDelay = delay;
204
+ }
205
+ }
206
+ }
207
+ return brainer;
208
+ }
209
+ return null;
210
+ }
211
+ /**
212
+ * network delay + idle factor
213
+ */
214
+ calcNetworkDelayValue(player, idleStart) {
215
+ let value = player.networkDelay;
216
+ if (idleStart > player.lastMsgTime) {
217
+ value += (idleStart - player.lastMsgTime) / 100;
218
+ }
219
+ return value;
220
+ }
221
+ getBrainer() {
222
+ return this.brainer;
223
+ }
224
+ broadcast(msg) {
225
+ MonitorManager_1.monitorManager.logOutgoing(this.client.project.code, this.monitorChannel, this.roomType + '.broadcast', [this.code, msg.type, msg.params]);
226
+ msg.send(this.server.to(this.socketChannel));
227
+ }
228
+ broadcastByPlayer(msg, sender) {
229
+ MonitorManager_1.monitorManager.logIncoming(this.client.project.code, this.monitorChannel, this.roomType + '.broadcast', [this.code, msg.type, msg.params], sender);
230
+ msg.send(this.server.to(this.socketChannel));
231
+ }
232
+ }
233
+ exports.GameroomBase = GameroomBase;
234
+ GameroomBase.EVENT = {
235
+ DISPOSED: 'disposed',
236
+ PLAYER_ADDED: 'playerAdded',
237
+ PLAYER_REMOVED: 'playerRemoved',
238
+ BRAINER_CHANGED: 'brainerChanged',
239
+ STATUS_CHANGED: 'statusChanged',
240
+ PLAYER_STATE_CHANGED: 'playerStateChanged',
241
+ PLAYER_STATES_CHANGED: 'playerStatesChanged',
242
+ PLAYER_SYNCED_CHANGED: 'playerSyncedChanged',
243
+ };
244
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR2FtZXJvb21CYXNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3NlcnZlci9lbnRpdGllcy9HYW1lcm9vbUJhc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EsaURBQThDO0FBQzlDLG9EQUFpRDtBQUVqRCxtQ0FBc0M7QUFDdEMsK0RBQTREO0FBRTVELE1BQWEsWUFBYSxTQUFRLHFCQUFZO0lBc0IxQyxZQUFtQixRQUFnQixFQUN4QixJQUFZLEVBQ1gsTUFBMEIsRUFDM0IsTUFBYyxFQUNkLFNBQWtDO1FBRXpDLEtBQUssRUFBRSxDQUFDO1FBTk8sYUFBUSxHQUFSLFFBQVEsQ0FBUTtRQUN4QixTQUFJLEdBQUosSUFBSSxDQUFRO1FBQ1gsV0FBTSxHQUFOLE1BQU0sQ0FBb0I7UUFDM0IsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLGNBQVMsR0FBVCxTQUFTLENBQXlCO1FBYm5DLFlBQU8sR0FBYSxFQUFFLENBQUM7UUFJakMscURBQXFEO1FBQzNDLGlCQUFZLEdBQThDLEVBQUUsQ0FBQztRQUVoRSxlQUFVLEdBQVcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUM7UUFTdEQsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxJQUFJLEVBQUUsQ0FBQztJQUMxQyxDQUFDO0lBRUQsSUFBSSxjQUFjO1FBQ2QsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDO0lBQ3JCLENBQUM7SUFFRCxPQUFPO1FBQ0gsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUNoRSxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDdkMsK0JBQWMsQ0FBQyxHQUFHLENBQUMsSUFB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
@@ -0,0 +1,73 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Gamezone = void 0;
4
+ const ArrayUtil_1 = require("./../utils/ArrayUtil");
5
+ const GameroomBase_1 = require("./GameroomBase");
6
+ class Gamezone extends GameroomBase_1.GameroomBase {
7
+ constructor(code, server, client) {
8
+ super('gamezone', code, server, client);
9
+ this.gamerooms = [];
10
+ this._socketChannel = this.client.key + '|' + this.code;
11
+ }
12
+ get monitorChannel() {
13
+ return `(zone) ${this.code}`;
14
+ }
15
+ get socketChannel() {
16
+ return this._socketChannel;
17
+ }
18
+ listGamerooms(filter, length) {
19
+ let list = [];
20
+ for (let room of this.gamerooms) {
21
+ if (filter.test(room)) {
22
+ list.push(room);
23
+ if (list.length >= length) {
24
+ break;
25
+ }
26
+ }
27
+ }
28
+ return list;
29
+ }
30
+ listAllGamerooms() {
31
+ return this.gamerooms;
32
+ }
33
+ addPlayer(player) {
34
+ if (super.addPlayer(player)) {
35
+ player.addGamezone(this);
36
+ return true;
37
+ }
38
+ return false;
39
+ }
40
+ removePlayer(player) {
41
+ if (super.removePlayer(player)) {
42
+ player.removeGamezone(this);
43
+ return true;
44
+ }
45
+ return false;
46
+ }
47
+ addGameroom(gameroom) {
48
+ return ArrayUtil_1.ArrayUtil.addUniqueElement(this.gamerooms, gameroom);
49
+ }
50
+ removeGameroom(gameroom) {
51
+ return ArrayUtil_1.ArrayUtil.removeElement(this.gamerooms, gameroom);
52
+ }
53
+ toVo() {
54
+ return {
55
+ code: this.code
56
+ };
57
+ }
58
+ toStatusVo() {
59
+ return {
60
+ stateJson: this.stateJson,
61
+ players: this.players.length,
62
+ brainer: this.brainer ? this.brainer.code : '',
63
+ };
64
+ }
65
+ toAndStatusVo() {
66
+ return {
67
+ zone: this.toVo(),
68
+ status: this.toStatusVo(),
69
+ };
70
+ }
71
+ }
72
+ exports.Gamezone = Gamezone;
73
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR2FtZXpvbmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvc2VydmVyL2VudGl0aWVzL0dhbWV6b25lLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUVBLG9EQUFpRDtBQUNqRCxpREFBOEM7QUFJOUMsTUFBYSxRQUFTLFNBQVEsMkJBQVk7SUFNdEMsWUFDSSxJQUFZLEVBQ1osTUFBMEIsRUFDMUIsTUFBYztRQUVkLEtBQUssQ0FBQyxVQUFVLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztRQVRwQyxjQUFTLEdBQWUsRUFBRSxDQUFDO1FBVS9CLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDNUQsQ0FBQztJQUVELElBQUksY0FBYztRQUNkLE9BQU8sVUFBVSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUE7SUFDaEMsQ0FBQztJQUVELElBQUksYUFBYTtRQUNiLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQztJQUMvQixDQUFDO0lBRUQsYUFBYSxDQUFDLE1BQWtCLEVBQUUsTUFBYztRQUM1QyxJQUFJLElBQUksR0FBZSxFQUFFLENBQUM7UUFDMUIsS0FBSyxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQzdCLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDbkIsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDaEIsSUFBSSxJQUFJLENBQUMsTUFBTSxJQUFJLE1BQU0sRUFBRTtvQkFDdkIsTUFBTTtpQkFDVDthQUNKO1NBQ0o7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRUQsZ0JBQWdCO1FBQ1osT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQzFCLENBQUM7SUFFRCxTQUFTLENBQUMsTUFBYztRQUNwQixJQUFJLEtBQUssQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDekIsTUFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN6QixPQUFPLElBQUksQ0FBQztTQUNmO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDakIsQ0FBQztJQUVELFlBQVksQ0FBQyxNQUFjO1FBQ3ZCLElBQUksS0FBSyxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUM1QixNQUFNLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzVCLE9BQU8sSUFBSSxDQUFDO1NBQ2Y7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDO0lBRUQsV0FBVyxDQUFDLFFBQWtCO1FBQzFCLE9BQU8scUJBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQ2hFLENBQUM7SUFFRCxjQUFjLENBQUMsUUFBa0I7UUFDN0IsT0FBTyxxQkFBUyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQzdELENBQUM7SUFFRCxJQUFJO1FBQ0EsT0FBTztZQUNILElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtTQUNsQixDQUFBO0lBQ0wsQ0FBQztJQUVELFVBQVU7UUFDTixPQUFPO1lBQ0gsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTO1lBQ3pCLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU07WUFDNUIsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFO1NBQ2pELENBQUE7SUFDTCxDQUFDO0lBRUQsYUFBYTtRQUNULE9BQU87WUFDSCxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRTtZQUNqQixNQUFNLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFBRTtTQUM1QixDQUFBO0lBQ0wsQ0FBQztDQUNKO0FBcEZELDRCQW9GQyJ9
@@ -0,0 +1,193 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.parsePropFilter = exports.PropFilter = void 0;
4
+ /*
5
+ export class ListFilter {
6
+
7
+ static EMPTY = new ListFilter([]);
8
+
9
+ constructor(private propFilters: Array<PropFilter>) {
10
+
11
+ }
12
+
13
+ filter(list: Array<any>): Array<any> {
14
+ return list.filter(item => this.test(item));
15
+ }
16
+
17
+ test(item: any): boolean {
18
+ for(let filter of this.propFilters) {
19
+ if(!filter.test(item)) {
20
+ return false;
21
+ }
22
+ }
23
+ return true;
24
+ }
25
+
26
+ static parse(list: IPropFilter[]): ListFilter {
27
+ if (list && list.length) {
28
+ let filters: Array<PropFilter> = list.map(json => parsePropFilter(json));
29
+ return new ListFilter(filters);
30
+ }
31
+ return ListFilter.EMPTY;
32
+ }
33
+ }
34
+ */
35
+ class PropFilter {
36
+ constructor(property) {
37
+ this.property = property;
38
+ this.propertyList = this.property.split('.');
39
+ }
40
+ getPropertyValue(obj) {
41
+ for (let prop of this.propertyList) {
42
+ if (!obj) {
43
+ return null;
44
+ }
45
+ obj = obj[prop];
46
+ }
47
+ return obj;
48
+ }
49
+ test(obj) {
50
+ return this.getPropertyValue(obj);
51
+ }
52
+ }
53
+ exports.PropFilter = PropFilter;
54
+ class FakeFilter extends PropFilter {
55
+ constructor() {
56
+ super('');
57
+ }
58
+ test(_obj) {
59
+ return true;
60
+ }
61
+ }
62
+ const fakeFilter = new FakeFilter();
63
+ class ExistFilter extends PropFilter {
64
+ constructor(property) {
65
+ super(property);
66
+ }
67
+ test(obj) {
68
+ return !!this.getPropertyValue(obj);
69
+ }
70
+ }
71
+ class EmptyFilter extends PropFilter {
72
+ constructor(property) {
73
+ super(property);
74
+ }
75
+ test(obj) {
76
+ return !this.getPropertyValue(obj);
77
+ }
78
+ }
79
+ class EqualFilter extends PropFilter {
80
+ constructor(property, value) {
81
+ super(property);
82
+ this.value = value;
83
+ }
84
+ test(obj) {
85
+ return this.getPropertyValue(obj) === this.value;
86
+ }
87
+ }
88
+ class IncludeFilter extends PropFilter {
89
+ constructor(property, values) {
90
+ super(property);
91
+ this.values = values;
92
+ }
93
+ test(obj) {
94
+ return this.values.includes(this.getPropertyValue(obj));
95
+ }
96
+ }
97
+ class ExcludeFilter extends PropFilter {
98
+ constructor(property, values) {
99
+ super(property);
100
+ this.values = values;
101
+ }
102
+ test(obj) {
103
+ return !this.values.includes(this.getPropertyValue(obj));
104
+ }
105
+ }
106
+ class RangeFilter extends PropFilter {
107
+ constructor(property, min, max) {
108
+ super(property);
109
+ this.min = min;
110
+ this.max = max;
111
+ }
112
+ test(obj) {
113
+ let value = this.getPropertyValue(obj);
114
+ if (value !== null) {
115
+ return value >= this.min && value <= this.max;
116
+ }
117
+ return false;
118
+ }
119
+ }
120
+ class MatchFilter extends PropFilter {
121
+ constructor(property, regexp) {
122
+ super(property);
123
+ let search = regexp.match(/^\/(.+)\/$/);
124
+ if (search) {
125
+ this.regexp = new RegExp(search[1]);
126
+ }
127
+ else {
128
+ this.regexp = new RegExp(regexp);
129
+ }
130
+ }
131
+ test(obj) {
132
+ let value = this.getPropertyValue(obj);
133
+ if (value !== null) {
134
+ return this.regexp.test(value);
135
+ }
136
+ return false;
137
+ }
138
+ }
139
+ class OrFilter extends PropFilter {
140
+ constructor(filters) {
141
+ super('');
142
+ this.filters = filters.map(f => parsePropFilter(f));
143
+ }
144
+ test(obj) {
145
+ for (let filter of this.filters) {
146
+ if (filter.test(obj)) {
147
+ return true;
148
+ }
149
+ }
150
+ return false;
151
+ }
152
+ }
153
+ class AndFilter extends OrFilter {
154
+ test(obj) {
155
+ for (let filter of this.filters) {
156
+ if (!filter.test(obj)) {
157
+ return false;
158
+ }
159
+ }
160
+ return true;
161
+ }
162
+ }
163
+ class NotFilter extends PropFilter {
164
+ constructor(filter) {
165
+ super('');
166
+ this.filter = parsePropFilter(filter);
167
+ }
168
+ test(obj) {
169
+ return !this.filter.test(obj);
170
+ }
171
+ }
172
+ function parsePropFilter(json) {
173
+ if (json && json.type) {
174
+ switch (json.type) {
175
+ case 'equal': return new EqualFilter(json.prop, json.data);
176
+ case 'include': return new IncludeFilter(json.prop, json.data);
177
+ case 'exclude': return new ExcludeFilter(json.prop, json.data);
178
+ case 'range': return new RangeFilter(json.prop, json.data.min, json.data.max);
179
+ case 'match': return new MatchFilter(json.prop, json.data);
180
+ case 'exist': return new ExistFilter(json.prop);
181
+ case 'empty': return new EmptyFilter(json.prop);
182
+ case 'or': return new OrFilter(json.data);
183
+ case 'and': return new AndFilter(json.data);
184
+ case 'not': return new NotFilter(json.data);
185
+ }
186
+ return new PropFilter(json.prop);
187
+ }
188
+ else {
189
+ return fakeFilter;
190
+ }
191
+ }
192
+ exports.parsePropFilter = parsePropFilter;
193
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTGlzdEZpbHRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9zZXJ2ZXIvZW50aXRpZXMvTGlzdEZpbHRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFLQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBOEJFO0FBRUYsTUFBYSxVQUFVO0lBSW5CLFlBQW1CLFFBQWdCO1FBQWhCLGFBQVEsR0FBUixRQUFRLENBQVE7UUFDL0IsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNqRCxDQUFDO0lBRUQsZ0JBQWdCLENBQUMsR0FBUTtRQUNyQixLQUFLLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDaEMsSUFBRyxDQUFDLEdBQUcsRUFBRTtnQkFDTCxPQUFPLElBQUksQ0FBQzthQUNmO1lBQ0QsR0FBRyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUNuQjtRQUNELE9BQU8sR0FBRyxDQUFDO0lBQ2YsQ0FBQztJQUVELElBQUksQ0FBQyxHQUFRO1FBQ1QsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDdEMsQ0FBQztDQUVKO0FBdEJELGdDQXNCQztBQUVELE1BQU0sVUFBVyxTQUFRLFVBQVU7SUFDL0I7UUFDSSxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDZCxDQUFDO0lBRUQsSUFBSSxDQUFDLElBQVM7UUFDVixPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0NBQ0o7QUFDRCxNQUFNLFVBQVUsR0FBRyxJQUFJLFVBQVUsRUFBRSxDQUFDO0FBR3BDLE1BQU0sV0FBWSxTQUFRLFVBQVU7SUFDaEMsWUFBWSxRQUFnQjtRQUN4QixLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDcEIsQ0FBQztJQUVELElBQUksQ0FBQyxHQUFRO1FBQ1QsT0FBTyxDQUFDLENB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