gamelet-cli 0.6.2 → 0.6.4

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 (68) hide show
  1. package/LICENSE +0 -0
  2. package/README.md +0 -0
  3. package/assets/common.d.ts +4 -4
  4. package/assets/gitignore.txt +65 -65
  5. package/assets/launch.json +21 -21
  6. package/assets/package.json.twig +22 -22
  7. package/assets/server/greenlock.d/config.json +25 -25
  8. package/assets/server/static/css/style.css +0 -0
  9. package/assets/server/static/js/monitor.js +0 -0
  10. package/assets/server/static/js/test.js +0 -0
  11. package/assets/server/views/error.twig +0 -0
  12. package/assets/server/views/index.twig +0 -0
  13. package/assets/server/views/monitor.twig +0 -0
  14. package/assets/server/views/test.twig +0 -0
  15. package/assets/tsconfig.json.twig +42 -42
  16. package/build/package.json +67 -67
  17. package/build/src/gamelet/download.js +736 -736
  18. package/build/src/gamelet/merges.js +143 -143
  19. package/build/src/gamelet/prepare.js +274 -274
  20. package/build/src/gamelet/upload.js +278 -278
  21. package/build/src/index.js +85 -85
  22. package/build/src/server/Constant.js +9 -9
  23. package/build/src/server/entities/Client.js +77 -77
  24. package/build/src/server/entities/ClientOwner.js +66 -66
  25. package/build/src/server/entities/ClientProject.js +83 -83
  26. package/build/src/server/entities/Gameroom.js +88 -88
  27. package/build/src/server/entities/GameroomBase.js +275 -275
  28. package/build/src/server/entities/Gamezone.js +72 -72
  29. package/build/src/server/entities/ListFilter.js +192 -192
  30. package/build/src/server/entities/Monitor.js +80 -80
  31. package/build/src/server/entities/Player.js +131 -131
  32. package/build/src/server/managers/ApiManager.js +74 -74
  33. package/build/src/server/managers/ClientManager.js +63 -63
  34. package/build/src/server/managers/Database.js +664 -594
  35. package/build/src/server/managers/GameroomManager.js +391 -391
  36. package/build/src/server/managers/ManagerBase.js +16 -16
  37. package/build/src/server/managers/MonitorManager.js +72 -72
  38. package/build/src/server/managers/PlayerManager.js +103 -103
  39. package/build/src/server/managers/SocketManager.js +55 -55
  40. package/build/src/server/managers/UserManager.js +57 -57
  41. package/build/src/server/messages/Message.js +141 -141
  42. package/build/src/server/server.js +109 -109
  43. package/build/src/server/services/ServiceBase.js +24 -24
  44. package/build/src/server/services/clientService.js +23 -23
  45. package/build/src/server/services/gameroomService.js +121 -121
  46. package/build/src/server/services/gltserver.service.js +23 -23
  47. package/build/src/server/services/playerService.js +29 -29
  48. package/build/src/server/startServer.js +32 -32
  49. package/build/src/server/types/BadgeStatus.js +24 -24
  50. package/build/src/server/types/OrderType.js +37 -37
  51. package/build/src/server/types/SubmitType.js +23 -23
  52. package/build/src/server/types/TimeRange.js +25 -25
  53. package/build/src/server/utils/ArrayUtil.js +125 -125
  54. package/build/src/server/utils/IntUtil.js +9 -9
  55. package/build/src/server/utils/ObjectUtil.js +190 -190
  56. package/build/src/server/utils/StringUtil.js +36 -36
  57. package/build/src/server/vo/Database.js +0 -0
  58. package/build/src/server/vo/Gameroom.js +0 -0
  59. package/build/src/server/vo/Gamezone.js +0 -0
  60. package/build/src/server/vo/Player.js +0 -0
  61. package/build/src/server/vo/Response.js +0 -0
  62. package/build/src/server/vo/System.js +0 -0
  63. package/build/src/utils/cli.js +48 -48
  64. package/build/src/utils/file.js +326 -326
  65. package/build/src/utils/init.js +41 -41
  66. package/build/src/utils/log.js +16 -16
  67. package/build/src/utils/net.js +38 -38
  68. package/package.json +2 -2
@@ -1,81 +1,81 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.Monitor = void 0;
4
- const ClientManager_1 = require("./../managers/ClientManager");
5
- const Message_1 = require("./../messages/Message");
6
- const events_1 = require("events");
7
- const StringUtil_1 = require("../utils/StringUtil");
8
- const PlayerManager_1 = require("../managers/PlayerManager");
9
- const gameroomService_1 = require("../services/gameroomService");
10
- class Monitor extends events_1.EventEmitter {
11
- constructor(code, socket, project, user) {
12
- super();
13
- this.code = code;
14
- this.socket = socket;
15
- this.project = project;
16
- this.user = user;
17
- }
18
- initialize() {
19
- /**
20
- * this is for monitor client accessing msgserver
21
- */
22
- this.socket.on(Message_1.MessageType.CLIENT_MONITOR_API, (projectCode, api, params, cb) => {
23
- ClientManager_1.clientManager.getClientProject(projectCode, false)
24
- .then(project => {
25
- let func = this['_clientapi_' + api];
26
- try {
27
- let result = func.apply(this, [project].concat(params));
28
- if (result && typeof result === 'object' && typeof result.then === 'function') {
29
- result.then(data => {
30
- cb({ data: data });
31
- });
32
- }
33
- else {
34
- cb({ data: result });
35
- }
36
- }
37
- catch (err) {
38
- cb({ error: StringUtil_1.StringUtil.errorToString(err) });
39
- }
40
- });
41
- });
42
- this.socket.on('disconnect', () => {
43
- this.dispose();
44
- });
45
- }
46
- dispose() {
47
- if (!this.socket.disconnected) {
48
- this.socket.disconnect(true);
49
- }
50
- }
51
- // client api --------------------------------------------
52
- _clientapi_list_players(project) {
53
- let list = [];
54
- if (project) {
55
- project.cleanDisconnectedPlayers();
56
- list = project.playerList;
57
- }
58
- return list.map(player => player.toMonitorPlayer());
59
- }
60
- _clientapi_disconnect_player(_project, playerCode) {
61
- let player = PlayerManager_1.playerManager.getPlayerByCode(playerCode);
62
- player && player.disconnect();
63
- }
64
- _clientapi_data_to_player(_project, playerCode, data) {
65
- let target = PlayerManager_1.playerManager.getPlayerByCode(playerCode);
66
- PlayerManager_1.playerManager.designContract(target, 'The player has left the game.');
67
- return target.send(Message_1.Message.forMonitorDataToPlayer(this, data));
68
- }
69
- _clientapi_data_to_project(_project, data) {
70
- return gameroomService_1.gameroomService._getManager().broadcastInProject(this, _project, data);
71
- }
72
- _clientapi_data_to_gamelet(_project, data) {
73
- gameroomService_1.gameroomService._getManager().designContract(_project.code == 'Server', 'Your monitor does not have the authority to make a Gamelet Broadcast');
74
- return gameroomService_1.gameroomService._getManager().broadcastInGamelet(this, data);
75
- }
76
- }
77
- exports.Monitor = Monitor;
78
- Monitor.EVENT = {
79
- DISCONNECTED: 'disconnected',
80
- };
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Monitor = void 0;
4
+ const ClientManager_1 = require("./../managers/ClientManager");
5
+ const Message_1 = require("./../messages/Message");
6
+ const events_1 = require("events");
7
+ const StringUtil_1 = require("../utils/StringUtil");
8
+ const PlayerManager_1 = require("../managers/PlayerManager");
9
+ const gameroomService_1 = require("../services/gameroomService");
10
+ class Monitor extends events_1.EventEmitter {
11
+ constructor(code, socket, project, user) {
12
+ super();
13
+ this.code = code;
14
+ this.socket = socket;
15
+ this.project = project;
16
+ this.user = user;
17
+ }
18
+ initialize() {
19
+ /**
20
+ * this is for monitor client accessing msgserver
21
+ */
22
+ this.socket.on(Message_1.MessageType.CLIENT_MONITOR_API, (projectCode, api, params, cb) => {
23
+ ClientManager_1.clientManager.getClientProject(projectCode, false)
24
+ .then(project => {
25
+ let func = this['_clientapi_' + api];
26
+ try {
27
+ let result = func.apply(this, [project].concat(params));
28
+ if (result && typeof result === 'object' && typeof result.then === 'function') {
29
+ result.then(data => {
30
+ cb({ data: data });
31
+ });
32
+ }
33
+ else {
34
+ cb({ data: result });
35
+ }
36
+ }
37
+ catch (err) {
38
+ cb({ error: StringUtil_1.StringUtil.errorToString(err) });
39
+ }
40
+ });
41
+ });
42
+ this.socket.on('disconnect', () => {
43
+ this.dispose();
44
+ });
45
+ }
46
+ dispose() {
47
+ if (!this.socket.disconnected) {
48
+ this.socket.disconnect(true);
49
+ }
50
+ }
51
+ // client api --------------------------------------------
52
+ _clientapi_list_players(project) {
53
+ let list = [];
54
+ if (project) {
55
+ project.cleanDisconnectedPlayers();
56
+ list = project.playerList;
57
+ }
58
+ return list.map(player => player.toMonitorPlayer());
59
+ }
60
+ _clientapi_disconnect_player(_project, playerCode) {
61
+ let player = PlayerManager_1.playerManager.getPlayerByCode(playerCode);
62
+ player && player.disconnect();
63
+ }
64
+ _clientapi_data_to_player(_project, playerCode, data) {
65
+ let target = PlayerManager_1.playerManager.getPlayerByCode(playerCode);
66
+ PlayerManager_1.playerManager.designContract(target, 'The player has left the game.');
67
+ return target.send(Message_1.Message.forMonitorDataToPlayer(this, data));
68
+ }
69
+ _clientapi_data_to_project(_project, data) {
70
+ return gameroomService_1.gameroomService._getManager().broadcastInProject(this, _project, data);
71
+ }
72
+ _clientapi_data_to_gamelet(_project, data) {
73
+ gameroomService_1.gameroomService._getManager().designContract(_project.code == 'Server', 'Your monitor does not have the authority to make a Gamelet Broadcast');
74
+ return gameroomService_1.gameroomService._getManager().broadcastInGamelet(this, data);
75
+ }
76
+ }
77
+ exports.Monitor = Monitor;
78
+ Monitor.EVENT = {
79
+ DISCONNECTED: 'disconnected',
80
+ };
81
81
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTW9uaXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9zZXJ2ZXIvZW50aXRpZXMvTW9uaXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSwrREFBNEQ7QUFDNUQsbURBQTZEO0FBRTdELG1DQUFzQztBQUN0QyxvREFBaUQ7QUFFakQsNkRBQTBEO0FBQzFELGlFQUE4RDtBQUU5RCxNQUFhLE9BQVEsU0FBUSxxQkFBWTtJQU1yQyxZQUFtQixJQUFZLEVBQVMsTUFBdUIsRUFBUyxPQUFzQixFQUFTLElBQWE7UUFDaEgsS0FBSyxFQUFFLENBQUM7UUFETyxTQUFJLEdBQUosSUFBSSxDQUFRO1FBQVMsV0FBTSxHQUFOLE1BQU0sQ0FBaUI7UUFBUyxZQUFPLEdBQVAsT0FBTyxDQUFlO1FBQVMsU0FBSSxHQUFKLElBQUksQ0FBUztJQUVwSCxDQUFDO0lBRU0sVUFBVTtRQUNiOztXQUVHO1FBQ0gsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMscUJBQVcsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLFdBQW1CLEVBQUUsR0FBVyxFQUFFLE1BQWEsRUFBRSxFQUE4QixFQUFFLEVBQUU7WUFDL0gsNkJBQWEsQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLEVBQUUsS0FBSyxDQUFDO2lCQUM3QyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUU7Z0JBQ1osSUFBSSxJQUFJLEdBQWEsSUFBSSxDQUFDLGFBQWEsR0FBRyxHQUFHLENBQUMsQ0FBQztnQkFDL0MsSUFBSTtvQkFDQSxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO29CQUN4RCxJQUFJLE1BQU0sSUFBSSxPQUFPLE1BQU0sS0FBSyxRQUFRLElBQUksT0FBTyxNQUFNLENBQUMsSUFBSSxLQUFLLFVBQVUsRUFBRTt3QkFDM0UsTUFBTSxDQUFDLElB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
@@ -1,132 +1,132 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.Player = void 0;
4
- const ArrayUtil_1 = require("./../utils/ArrayUtil");
5
- const gameroomService_1 = require("../services/gameroomService");
6
- const StringUtil_1 = require("../utils/StringUtil");
7
- const events_1 = require("events");
8
- const playerService_1 = require("../services/playerService");
9
- const MonitorManager_1 = require("../managers/MonitorManager");
10
- const clientService_1 = require("../services/clientService");
11
- class Player extends events_1.EventEmitter {
12
- constructor(code, socket, client, user, _networkDelay) {
13
- super();
14
- this.code = code;
15
- this.socket = socket;
16
- this.client = client;
17
- this.user = user;
18
- this._networkDelay = _networkDelay;
19
- this.gamezones = [];
20
- // timestamp in seconds
21
- this.loginTime = 0;
22
- // timestamp in milliseconds
23
- this._lastMsgTime = 0;
24
- this._cheats = 0;
25
- this._lastMsgTime = Date.now();
26
- this.loginTime = Math.floor(this._lastMsgTime / 1000);
27
- this.setupServiceCall(gameroomService_1.gameroomService);
28
- this.setupServiceCall(clientService_1.clientService);
29
- this.setupServiceCall(playerService_1.playerService);
30
- MonitorManager_1.monitorManager.eventPlayerConneced(this);
31
- socket.on('disconnect', () => this.onDisconnected());
32
- let gameroomManager = gameroomService_1.gameroomService._getManager();
33
- gameroomManager.enterGamezone(this, gameroomManager.getClientZone(this.client).code);
34
- }
35
- onDisconnected() {
36
- if (this.gameroom) {
37
- this.gameroom.removePlayer(this);
38
- }
39
- this.gamezones.slice().forEach(zone => zone.removePlayer(this));
40
- this.emit(Player.EVENT.DISCONNECTED, this);
41
- MonitorManager_1.monitorManager.eventPlayerDisconnected(this);
42
- }
43
- addCheat() {
44
- this._cheats++;
45
- }
46
- get cheats() {
47
- return this._cheats;
48
- }
49
- setNetworkDelay(value) {
50
- this._networkDelay = value;
51
- }
52
- get networkDelay() {
53
- return this._networkDelay;
54
- }
55
- get lastMsgTime() {
56
- return this._lastMsgTime;
57
- }
58
- setupServiceCall(service) {
59
- this.socket.on(service.name, (method, params, cb) => {
60
- this._lastMsgTime = Date.now();
61
- service._execute(this, method, params)
62
- .then(result => {
63
- cb({ data: result });
64
- })
65
- .catch(err => {
66
- cb({ error: StringUtil_1.StringUtil.errorToString(err) });
67
- });
68
- });
69
- }
70
- get clientUserKey() {
71
- return this.client.project.code + '/' + this.user.username;
72
- }
73
- disconnect() {
74
- if (this.socket.disconnected) {
75
- this.onDisconnected();
76
- }
77
- else {
78
- this.socket.disconnect(true);
79
- }
80
- }
81
- toVo() {
82
- let json = {
83
- code: this.code,
84
- user: this.user,
85
- loginTime: this.loginTime,
86
- networkDelay: this.networkDelay,
87
- };
88
- if (this.socket.disconnected) {
89
- json.disconnected = true;
90
- }
91
- return json;
92
- }
93
- toMonitorPlayer() {
94
- return Object.assign(this.toVo(), {
95
- msgVer: this.client.msgVersion,
96
- lastMsgTime: this.lastMsgTime
97
- });
98
- }
99
- send(msg) {
100
- if (this.socket.connected) {
101
- return new Promise(resolve => {
102
- MonitorManager_1.monitorManager.logOutgoing(this.client.project.code, 'player', 'player.send', [this.code, msg.type, msg.params]);
103
- msg.send(this.socket, response => {
104
- resolve(response);
105
- });
106
- });
107
- }
108
- return Promise.reject('not connected');
109
- }
110
- getGameroom() {
111
- return this.gameroom;
112
- }
113
- setGameroom(gameroom) {
114
- if (this.gameroom) {
115
- let oldRoom = this.gameroom;
116
- this.gameroom = null;
117
- oldRoom.removePlayer(this);
118
- }
119
- this.gameroom = gameroom;
120
- }
121
- addGamezone(gamezone) {
122
- ArrayUtil_1.ArrayUtil.addUniqueElement(this.gamezones, gamezone);
123
- }
124
- removeGamezone(gamezone) {
125
- ArrayUtil_1.ArrayUtil.removeElement(this.gamezones, gamezone);
126
- }
127
- }
128
- exports.Player = Player;
129
- Player.EVENT = {
130
- DISCONNECTED: 'disconnected',
131
- };
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Player = void 0;
4
+ const ArrayUtil_1 = require("./../utils/ArrayUtil");
5
+ const gameroomService_1 = require("../services/gameroomService");
6
+ const StringUtil_1 = require("../utils/StringUtil");
7
+ const events_1 = require("events");
8
+ const playerService_1 = require("../services/playerService");
9
+ const MonitorManager_1 = require("../managers/MonitorManager");
10
+ const clientService_1 = require("../services/clientService");
11
+ class Player extends events_1.EventEmitter {
12
+ constructor(code, socket, client, user, _networkDelay) {
13
+ super();
14
+ this.code = code;
15
+ this.socket = socket;
16
+ this.client = client;
17
+ this.user = user;
18
+ this._networkDelay = _networkDelay;
19
+ this.gamezones = [];
20
+ // timestamp in seconds
21
+ this.loginTime = 0;
22
+ // timestamp in milliseconds
23
+ this._lastMsgTime = 0;
24
+ this._cheats = 0;
25
+ this._lastMsgTime = Date.now();
26
+ this.loginTime = Math.floor(this._lastMsgTime / 1000);
27
+ this.setupServiceCall(gameroomService_1.gameroomService);
28
+ this.setupServiceCall(clientService_1.clientService);
29
+ this.setupServiceCall(playerService_1.playerService);
30
+ MonitorManager_1.monitorManager.eventPlayerConneced(this);
31
+ socket.on('disconnect', () => this.onDisconnected());
32
+ let gameroomManager = gameroomService_1.gameroomService._getManager();
33
+ gameroomManager.enterGamezone(this, gameroomManager.getClientZone(this.client).code);
34
+ }
35
+ onDisconnected() {
36
+ if (this.gameroom) {
37
+ this.gameroom.removePlayer(this);
38
+ }
39
+ this.gamezones.slice().forEach(zone => zone.removePlayer(this));
40
+ this.emit(Player.EVENT.DISCONNECTED, this);
41
+ MonitorManager_1.monitorManager.eventPlayerDisconnected(this);
42
+ }
43
+ addCheat() {
44
+ this._cheats++;
45
+ }
46
+ get cheats() {
47
+ return this._cheats;
48
+ }
49
+ setNetworkDelay(value) {
50
+ this._networkDelay = value;
51
+ }
52
+ get networkDelay() {
53
+ return this._networkDelay;
54
+ }
55
+ get lastMsgTime() {
56
+ return this._lastMsgTime;
57
+ }
58
+ setupServiceCall(service) {
59
+ this.socket.on(service.name, (method, params, cb) => {
60
+ this._lastMsgTime = Date.now();
61
+ service._execute(this, method, params)
62
+ .then(result => {
63
+ cb({ data: result });
64
+ })
65
+ .catch(err => {
66
+ cb({ error: StringUtil_1.StringUtil.errorToString(err) });
67
+ });
68
+ });
69
+ }
70
+ get clientUserKey() {
71
+ return this.client.project.code + '/' + this.user.username;
72
+ }
73
+ disconnect() {
74
+ if (this.socket.disconnected) {
75
+ this.onDisconnected();
76
+ }
77
+ else {
78
+ this.socket.disconnect(true);
79
+ }
80
+ }
81
+ toVo() {
82
+ let json = {
83
+ code: this.code,
84
+ user: this.user,
85
+ loginTime: this.loginTime,
86
+ networkDelay: this.networkDelay,
87
+ };
88
+ if (this.socket.disconnected) {
89
+ json.disconnected = true;
90
+ }
91
+ return json;
92
+ }
93
+ toMonitorPlayer() {
94
+ return Object.assign(this.toVo(), {
95
+ msgVer: this.client.msgVersion,
96
+ lastMsgTime: this.lastMsgTime
97
+ });
98
+ }
99
+ send(msg) {
100
+ if (this.socket.connected) {
101
+ return new Promise(resolve => {
102
+ MonitorManager_1.monitorManager.logOutgoing(this.client.project.code, 'player', 'player.send', [this.code, msg.type, msg.params]);
103
+ msg.send(this.socket, response => {
104
+ resolve(response);
105
+ });
106
+ });
107
+ }
108
+ return Promise.reject('not connected');
109
+ }
110
+ getGameroom() {
111
+ return this.gameroom;
112
+ }
113
+ setGameroom(gameroom) {
114
+ if (this.gameroom) {
115
+ let oldRoom = this.gameroom;
116
+ this.gameroom = null;
117
+ oldRoom.removePlayer(this);
118
+ }
119
+ this.gameroom = gameroom;
120
+ }
121
+ addGamezone(gamezone) {
122
+ ArrayUtil_1.ArrayUtil.addUniqueElement(this.gamezones, gamezone);
123
+ }
124
+ removeGamezone(gamezone) {
125
+ ArrayUtil_1.ArrayUtil.removeElement(this.gamezones, gamezone);
126
+ }
127
+ }
128
+ exports.Player = Player;
129
+ Player.EVENT = {
130
+ DISCONNECTED: 'disconnected',
131
+ };
132
132
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUGxheWVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3NlcnZlci9lbnRpdGllcy9QbGF5ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBRUEsb0RBQWlEO0FBQ2pELGlFQUE4RDtBQUc5RCxvREFBaUQ7QUFDakQsbUNBQXNDO0FBQ3RDLDZEQUEwRDtBQUMxRCwrREFBNEQ7QUFDNUQsNkRBQTBEO0FBRzFELE1BQWEsTUFBTyxTQUFRLHFCQUFZO0lBa0JwQyxZQUFtQixJQUFZLEVBQVMsTUFBdUIsRUFBUyxNQUFjLEVBQVMsSUFBYSxFQUFVLGFBQXFCO1FBQ3ZJLEtBQUssRUFBRSxDQUFDO1FBRE8sU0FBSSxHQUFKLElBQUksQ0FBUTtRQUFTLFdBQU0sR0FBTixNQUFNLENBQWlCO1FBQVMsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUFTLFNBQUksR0FBSixJQUFJLENBQVM7UUFBVSxrQkFBYSxHQUFiLGFBQWEsQ0FBUTtRQVZuSSxjQUFTLEdBQWUsRUFBRSxDQUFDO1FBRW5DLHVCQUF1QjtRQUNmLGNBQVMsR0FBVyxDQUFDLENBQUM7UUFFOUIsNEJBQTRCO1FBQ3BCLGlCQUFZLEdBQVcsQ0FBQyxDQUFDO1FBRXpCLFlBQU8sR0FBVyxDQUFDLENBQUM7UUFLeEIsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDL0IsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLENBQUM7UUFFdEQsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGlDQUFlLENBQUMsQ0FBQztRQUN2QyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsNkJBQWEsQ0FBQyxDQUFDO1FBQ3JDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyw2QkFBYSxDQUFDLENBQUM7UUFFckMsK0JBQWMsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUV6QyxN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
@@ -1,75 +1,75 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.apiManager = void 0;
7
- const ManagerBase_1 = require("./ManagerBase");
8
- const cors_1 = __importDefault(require("cors"));
9
- const ClientManager_1 = require("./ClientManager");
10
- const MaxListClientsLength = 100;
11
- class ApiManager extends ManagerBase_1.ManagerBase {
12
- constructor() {
13
- super('ApiManager');
14
- }
15
- initialize(app) {
16
- /**
17
- * this is for gltserver to access msgserver states
18
- */
19
- app.get('/clientapi/:method/:clientCode', cors_1.default(), (_req, res) => {
20
- this.callMethod('clientapi_', _req.params.method, this.parseParams(_req.params.clientCode, _req.query.args))
21
- .then(json => {
22
- res.json(json);
23
- })
24
- .catch(err => {
25
- res.sendStatus(500).json(err);
26
- });
27
- });
28
- }
29
- parseParams(firstParam, paramsString) {
30
- let params = paramsString && JSON.parse(paramsString);
31
- if (!Array.isArray(params)) {
32
- params = [];
33
- }
34
- if (firstParam !== null) {
35
- params.unshift(firstParam);
36
- }
37
- return params;
38
- }
39
- callMethod(prefix, methodName, params) {
40
- let method = this[prefix + methodName];
41
- this.designContract(method && typeof method === 'function', 'This api is not available.');
42
- return method.apply(this, params);
43
- }
44
- clientapi_list_players_count(_clientCode, clientCodes) {
45
- if (clientCodes.length > MaxListClientsLength) {
46
- clientCodes = clientCodes.slice(0, MaxListClientsLength);
47
- }
48
- let json = {};
49
- for (let clientCode of clientCodes) {
50
- let project = ClientManager_1.clientManager.getCachedClientProject(clientCode);
51
- if (project) {
52
- json[clientCode] = project.playersCount;
53
- }
54
- }
55
- return Promise.resolve(json);
56
- }
57
- clientapi_get_players_count(clientCode, version, options) {
58
- let project = ClientManager_1.clientManager.getCachedClientProject(clientCode);
59
- return Promise.resolve({
60
- count: project ? project.getPlayersCount(version, options) : 0
61
- });
62
- }
63
- clientapi_list_clients(_clientCode, start, length) {
64
- length = Math.min(length, MaxListClientsLength);
65
- let projects = ClientManager_1.clientManager.listProjects().slice(start, start + length);
66
- let clients = {};
67
- for (let project of projects) {
68
- clients[project.code] = project.playersCount;
69
- ;
70
- }
71
- return Promise.resolve(clients);
72
- }
73
- }
74
- exports.apiManager = new ApiManager();
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.apiManager = void 0;
7
+ const ManagerBase_1 = require("./ManagerBase");
8
+ const cors_1 = __importDefault(require("cors"));
9
+ const ClientManager_1 = require("./ClientManager");
10
+ const MaxListClientsLength = 100;
11
+ class ApiManager extends ManagerBase_1.ManagerBase {
12
+ constructor() {
13
+ super('ApiManager');
14
+ }
15
+ initialize(app) {
16
+ /**
17
+ * this is for gltserver to access msgserver states
18
+ */
19
+ app.get('/clientapi/:method/:clientCode', cors_1.default(), (_req, res) => {
20
+ this.callMethod('clientapi_', _req.params.method, this.parseParams(_req.params.clientCode, _req.query.args))
21
+ .then(json => {
22
+ res.json(json);
23
+ })
24
+ .catch(err => {
25
+ res.sendStatus(500).json(err);
26
+ });
27
+ });
28
+ }
29
+ parseParams(firstParam, paramsString) {
30
+ let params = paramsString && JSON.parse(paramsString);
31
+ if (!Array.isArray(params)) {
32
+ params = [];
33
+ }
34
+ if (firstParam !== null) {
35
+ params.unshift(firstParam);
36
+ }
37
+ return params;
38
+ }
39
+ callMethod(prefix, methodName, params) {
40
+ let method = this[prefix + methodName];
41
+ this.designContract(method && typeof method === 'function', 'This api is not available.');
42
+ return method.apply(this, params);
43
+ }
44
+ clientapi_list_players_count(_clientCode, clientCodes) {
45
+ if (clientCodes.length > MaxListClientsLength) {
46
+ clientCodes = clientCodes.slice(0, MaxListClientsLength);
47
+ }
48
+ let json = {};
49
+ for (let clientCode of clientCodes) {
50
+ let project = ClientManager_1.clientManager.getCachedClientProject(clientCode);
51
+ if (project) {
52
+ json[clientCode] = project.playersCount;
53
+ }
54
+ }
55
+ return Promise.resolve(json);
56
+ }
57
+ clientapi_get_players_count(clientCode, version, options) {
58
+ let project = ClientManager_1.clientManager.getCachedClientProject(clientCode);
59
+ return Promise.resolve({
60
+ count: project ? project.getPlayersCount(version, options) : 0
61
+ });
62
+ }
63
+ clientapi_list_clients(_clientCode, start, length) {
64
+ length = Math.min(length, MaxListClientsLength);
65
+ let projects = ClientManager_1.clientManager.listProjects().slice(start, start + length);
66
+ let clients = {};
67
+ for (let project of projects) {
68
+ clients[project.code] = project.playersCount;
69
+ ;
70
+ }
71
+ return Promise.resolve(clients);
72
+ }
73
+ }
74
+ exports.apiManager = new ApiManager();
75
75
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQXBpTWFuYWdlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9zZXJ2ZXIvbWFuYWdlcnMvQXBpTWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSwrQ0FBNEM7QUFFNUMsZ0RBQXdCO0FBQ3hCLG1EQUFnRDtBQUdoRCxNQUFNLG9CQUFvQixHQUFHLEdBQUcsQ0FBQztBQUVqQyxNQUFNLFVBQVcsU0FBUSx5QkFBVztJQUVoQztRQUNJLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUN4QixDQUFDO0lBRUQsVUFBVSxDQUFDLEdBQW9CO1FBRTNCOztXQUVHO1FBQ0gsR0FBRyxDQUFDLEdBQUcsQ0FBQyxnQ0FBZ0MsRUFBRSxjQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsRUFBRTtZQUM1RCxJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBYyxDQUFDLENBQUM7aUJBQ2pILElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDVCxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ25CLENBQUMsQ0FBQztpQkFDRCxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUU7Z0JBQ1QsR0FBRyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDbEMsQ0FBQyxDQUFDLENBQUM7UUFDWCxDQUFDLENBQUMsQ0FBQztJQUVQLENBQUM7SUFFTyxXQUFXLENBQUMsVUFBZSxFQUFFLFlBQW9CO1FBQ3JELElBQUksTUFBTSxHQUFVLFlBQVksSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQzdELElBQUksQ0FB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