melo-example-robot 1.7.6

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/dist/app.js ADDED
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ let envConfig = require('./app/config/env.json');
4
+ let config = require('./app/config/' + envConfig.env + '/config');
5
+ const melo_robot_1 = require("@bigtyphoon/melo-robot");
6
+ const fs = require("fs");
7
+ let robot = new melo_robot_1.Robot(config);
8
+ let mode = 'master';
9
+ if (process.argv.length > 2) {
10
+ mode = process.argv[2];
11
+ }
12
+ if (mode !== 'master' && mode !== 'client') {
13
+ throw new Error(' mode must be master or client');
14
+ }
15
+ if (mode === 'master') {
16
+ robot.runMaster(__filename);
17
+ }
18
+ else {
19
+ let script = (process.cwd() + envConfig.script);
20
+ script = script.replace(/\\/g, '/');
21
+ robot.runAgent(script);
22
+ }
23
+ process.on('uncaughtException', function (err) {
24
+ /* temporary code */
25
+ console.error(' Caught exception: ' + err.stack);
26
+ if (!!robot && !!robot.agent) {
27
+ // robot.agent.socket.emit('crash', err.stack);
28
+ }
29
+ fs.appendFile('./log/.log', err.stack, function (err) {
30
+ });
31
+ /* temporary code */
32
+ });
33
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vYXBwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsSUFBSSxTQUFTLEdBQUcsT0FBTyxDQUFDLHVCQUF1QixDQUFDLENBQUM7QUFDakQsSUFBSSxNQUFNLEdBQUcsT0FBTyxDQUFDLGVBQWUsR0FBRyxTQUFTLENBQUMsR0FBRyxHQUFHLFNBQVMsQ0FBQyxDQUFDO0FBQ2xFLHVEQUErQztBQUMvQyx5QkFBMEI7QUFFMUIsSUFBSSxLQUFLLEdBQUcsSUFBSSxrQkFBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQzlCLElBQUksSUFBSSxHQUFHLFFBQVEsQ0FBQztBQUVwQixJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtJQUN6QixJQUFJLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUMxQjtBQUVELElBQUksSUFBSSxLQUFLLFFBQVEsSUFBSSxJQUFJLEtBQUssUUFBUSxFQUFFO0lBQ3hDLE1BQU0sSUFBSSxLQUFLLENBQUMsZ0NBQWdDLENBQUMsQ0FBQztDQUNyRDtBQUVELElBQUksSUFBSSxLQUFLLFFBQVEsRUFBRTtJQUNuQixLQUFLLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0NBQy9CO0tBQU07SUFDSCxJQUFJLE1BQU0sR0FBRyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDaEQsTUFBTSxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ3BDLEtBQUssQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7Q0FDMUI7QUFFRCxPQUFPLENBQUMsRUFBRSxDQUFDLG1CQUFtQixFQUFFLFVBQVUsR0FBRztJQUN6QyxvQkFBb0I7SUFDcEIsT0FBTyxDQUFDLEtBQUssQ0FBQyxxQkFBcUIsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDakQsSUFBSSxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFO1FBQzFCLCtDQUErQztLQUNsRDtJQUNELEVBQUUsQ0FBQyxVQUFVLENBQUMsWUFBWSxFQUFFLEdBQUcsQ0FBQyxLQUFLLEVBQUUsVUFBVSxHQUFHO0lBQ3BELENBQUMsQ0FBQyxDQUFDO0lBQ0gsb0JBQW9CO0FBQ3hCLENBQUMsQ0FBQyxDQUFDIn0=
package/dist/http.js ADDED
@@ -0,0 +1,66 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const cluster_1 = require("cluster");
4
+ const http = require("http");
5
+ let envConfig = require('./app/config/env.json');
6
+ let config = require('./app/config/' + envConfig.env + '/config');
7
+ let path = __filename.substring(0, __filename.lastIndexOf('/'));
8
+ const melo_robot_1 = require("@bigtyphoon/melo-robot");
9
+ let robot = new melo_robot_1.Robot(config);
10
+ function run(num) {
11
+ for (let i = 0; i < num; i++) {
12
+ cluster_1.default.fork();
13
+ }
14
+ }
15
+ function stop() {
16
+ for (let id in cluster_1.default.workers) {
17
+ cluster_1.default.workers[id].process.kill();
18
+ }
19
+ }
20
+ function startHttp() {
21
+ http.createServer(function (req, res) {
22
+ if (req.method === 'GET') {
23
+ let url = require('url').parse(req.url, true);
24
+ if (url.pathname === '/') {
25
+ return res.end(JSON.stringify(config) + '\n');
26
+ }
27
+ else if (url.pathname === '/set') {
28
+ for (let key in url.query) {
29
+ config['apps'][key] = (typeof config[key] === 'number') ? +url.query[key] : url.query[key];
30
+ }
31
+ return res.end(JSON.stringify(config) + '\n');
32
+ }
33
+ else if (url.pathname === '/restart') {
34
+ require('child_process').exec('sudo restart client', function () { });
35
+ return res.end('OK\n');
36
+ }
37
+ else if (url.pathname === '/pull') {
38
+ require('child_process').exec('cd /home/ubuntu/hello && git pull ', function () { });
39
+ return res.end('OK\n');
40
+ }
41
+ else if (url.pathname === '/stop') {
42
+ setTimeout(function () { stop(); }, 1000);
43
+ return res.end('HTTP SERVER CLOSE OK\n');
44
+ }
45
+ else if (url.pathname === '/start') {
46
+ let num = url.query['num'] || 1;
47
+ run(num);
48
+ return res.end('OK\n' + num);
49
+ }
50
+ }
51
+ res.writeHead(404);
52
+ res.end('<h1>404<h1>\n');
53
+ }).listen(config.master.cwebport);
54
+ console.log(' http server start at http://127.0.0.1:' + config.master.cwebport);
55
+ }
56
+ process.on('uncaughtException', function (err) {
57
+ console.error(' Caught exception: ' + err.stack);
58
+ require('fs').writeFileSync('/tmp/log', err.stack, 'utf8');
59
+ });
60
+ if (cluster_1.default.isMaster) {
61
+ startHttp();
62
+ }
63
+ else {
64
+ robot.runAgent(path + envConfig.script);
65
+ }
66
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL2h0dHAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxxQ0FBOEI7QUFDOUIsNkJBQTZCO0FBQzdCLElBQUksU0FBUyxHQUFHLE9BQU8sQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO0FBQ2pELElBQUksTUFBTSxHQUFHLE9BQU8sQ0FBQyxlQUFlLEdBQUcsU0FBUyxDQUFDLEdBQUcsR0FBRyxTQUFTLENBQUMsQ0FBQztBQUNsRSxJQUFJLElBQUksR0FBRyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxVQUFVLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDaEUsdURBQStDO0FBRS9DLElBQUksS0FBSyxHQUFHLElBQUksa0JBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUU5QixTQUFTLEdBQUcsQ0FBQyxHQUFHO0lBQ1osS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUMxQixpQkFBTyxDQUFDLElBQUksRUFBRSxDQUFDO0tBQ2xCO0FBQ0wsQ0FBQztBQUVELFNBQVMsSUFBSTtJQUNULEtBQUssSUFBSSxFQUFFLElBQUksaUJBQU8sQ0FBQyxPQUFPLEVBQUU7UUFDNUIsaUJBQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDO0tBQ3RDO0FBQ0wsQ0FBQztBQUVELFNBQVMsU0FBUztJQUNkLElBQUksQ0FBQyxZQUFZLENBQUMsVUFBVSxHQUFHLEVBQUUsR0FBRztRQUNoQyxJQUFJLEdBQUcsQ0FBQyxNQUFNLEtBQUssS0FBSyxFQUFFO1lBQ3RCLElBQUksR0FBRyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUM5QyxJQUFJLEdBQUcsQ0FB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
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.cacheClass = void 0;
4
+ const fs = require("fs");
5
+ class CacheClass {
6
+ getCache() {
7
+ try {
8
+ return JSON.parse(fs.readFileSync(__dirname + '/cache.tmp').toString());
9
+ }
10
+ catch (err) {
11
+ return null;
12
+ }
13
+ }
14
+ saveCache(cache) {
15
+ fs.writeFileSync(__dirname + '/cache.tmp', JSON.stringify(cache, null, 4));
16
+ }
17
+ }
18
+ exports.cacheClass = new CacheClass();
19
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FjaGVDbGFzcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL25vZGVqcy10cy1jbGllbnQvY2FjaGVDbGFzcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFDQSx5QkFBeUI7QUFJekIsTUFBTSxVQUFVO0lBQ1osUUFBUTtRQUNKLElBQUc7WUFDQyxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxTQUFTLEdBQUMsWUFBWSxDQUFDLENBQUMsUUFBUSxFQUFFLENBQU8sQ0FBQztTQUMvRTtRQUFBLE9BQU8sR0FBRyxFQUFDO1lBQ1IsT0FBTyxJQUFJLENBQUM7U0FDZjtJQUNMLENBQUM7SUFFRCxTQUFTLENBQUMsS0FBSztRQUNYLEVBQUUsQ0FBQyxhQUFhLENBQUMsU0FBUyxHQUFDLFlBQVksRUFBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBQyxJQUFJLEVBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMxRSxDQUFDO0NBQ0o7QUFHWSxRQUFBLFVBQVUsR0FBRyxJQUFJLFVBQVUsRUFBRSxDQUFDIn0=
@@ -0,0 +1,396 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Pomelo = void 0;
4
+ const WebSocket = require("ws");
5
+ const melo_protocol_1 = require("@bigtyphoon/melo-protocol");
6
+ const melo_protobuf_1 = require("@bigtyphoon/melo-protobuf");
7
+ const events_1 = require("events");
8
+ const cacheClass_1 = require("./cacheClass");
9
+ const my_logger_1 = require("./my.logger");
10
+ const JS_WS_CLIENT_TYPE = 'js-ws';
11
+ const JS_WS_CLIENT_VERSION = '0.0.1';
12
+ const RES_OK = 200;
13
+ const RES_OLD_CLIENT = 501;
14
+ const CODE_DICT_ERROR = 502;
15
+ const CODE_PROTOS_ERROR = 503;
16
+ class Pomelo extends events_1.EventEmitter {
17
+ constructor(useNestLogger = true, showPackageLog = true) {
18
+ super();
19
+ this.showPackageLog = showPackageLog;
20
+ this.socket = null;
21
+ this.reqId = 0;
22
+ this.callbacks = {};
23
+ this.handlers = {};
24
+ this.routeMap = {};
25
+ this.protobuf = null;
26
+ this.heartbeatInterval = 5000;
27
+ this.heartbeatTimeout = this.heartbeatInterval * 2;
28
+ this.nextHeartbeatTimeout = 0;
29
+ this.gapThreshold = 100; // heartbeat gap threshold
30
+ this.heartbeatId = null;
31
+ this.heartbeatTimeoutId = null;
32
+ this.handshakeCallback = null;
33
+ this.handshakeBuffer = {
34
+ 'sys': {
35
+ type: JS_WS_CLIENT_TYPE,
36
+ version: JS_WS_CLIENT_VERSION,
37
+ dictVersion: '',
38
+ protoVersion: ''
39
+ },
40
+ 'user': {}
41
+ };
42
+ this.initCallback = null;
43
+ this.params = null;
44
+ this.data = {};
45
+ this.sysCache = null;
46
+ this.handlers[melo_protocol_1.Package.TYPE_HANDSHAKE] = this.handshake.bind(this);
47
+ this.handlers[melo_protocol_1.Package.TYPE_HEARTBEAT] = this.heartbeat.bind(this);
48
+ this.handlers[melo_protocol_1.Package.TYPE_DATA] = this.onData.bind(this);
49
+ this.handlers[melo_protocol_1.Package.TYPE_KICK] = this.onKick.bind(this);
50
+ if (useNestLogger) {
51
+ this.logger = new my_logger_1.MyLogger('wsclient-' + ++Pomelo.ClientId);
52
+ }
53
+ else {
54
+ this.logger = console;
55
+ }
56
+ }
57
+ initAsync(params) {
58
+ return new Promise(resolve => {
59
+ this.params = params;
60
+ params.debug = true;
61
+ this.initCallback = resolve;
62
+ const host = params.host;
63
+ const port = params.port;
64
+ let url = host;
65
+ if (port) {
66
+ url += ':' + port;
67
+ }
68
+ this.sysCache = cacheClass_1.cacheClass.getCache() || {};
69
+ this.handshakeBuffer.sys.dictVersion = this.sysCache.dictVersion || 0;
70
+ this.handshakeBuffer.sys.protoVersion = this.sysCache.protoVersion || 0;
71
+ if (!params.type) {
72
+ this.logger.log('init websocket');
73
+ this.handshakeBuffer.user = params.user;
74
+ this.handshakeCallback = params.handshakeCallback;
75
+ this.initWebSocket(url, resolve);
76
+ }
77
+ });
78
+ }
79
+ init(params, cb) {
80
+ this.params = params;
81
+ params.debug = true;
82
+ this.initCallback = cb;
83
+ const host = params.host;
84
+ const port = params.port;
85
+ let url = 'ws://' + host;
86
+ if (port) {
87
+ url += ':' + port;
88
+ }
89
+ this.sysCache = cacheClass_1.cacheClass.getCache() || {};
90
+ this.handshakeBuffer.sys.dictVersion = this.sysCache.dictVersion || 0;
91
+ this.handshakeBuffer.sys.protoVersion = this.sysCache.protoVersion || 0;
92
+ if (!params.type) {
93
+ this.logger.log('init websocket');
94
+ this.handshakeBuffer.user = params.user;
95
+ this.handshakeCallback = params.handshakeCallback;
96
+ this.initWebSocket(url, cb);
97
+ }
98
+ }
99
+ ;
100
+ initWebSocket(url, cb) {
101
+ this.logger.log(url);
102
+ const onopen = (event) => {
103
+ this.logger.log('[pomeloclient.init] websocket connected!');
104
+ const obj = melo_protocol_1.Package.encode(melo_protocol_1.Package.TYPE_HANDSHAKE, melo_protocol_1.Protocol.strencode(JSON.stringify(this.handshakeBuffer)));
105
+ this.send(obj);
106
+ };
107
+ const onmessage = (event) => {
108
+ if (this.showPackageLog && event.data.byteLength != 4) {
109
+ this.logger.log('recv orgdata', event.data.byteLength, Buffer.from(event.data).toString('hex'));
110
+ }
111
+ this.processPackage(melo_protocol_1.Package.decode(event.data)); //, cb);
112
+ // new package arrived, update the heartbeat timeout
113
+ if (this.heartbeatTimeout) {
114
+ this.nextHeartbeatTimeout = Date.now() + this.heartbeatTimeout;
115
+ }
116
+ };
117
+ const onerror = (event) => {
118
+ this.emit('io-error', event);
119
+ this.logger.log('socket error %j ', event);
120
+ };
121
+ const onclose = (event) => {
122
+ this.emit('close', event);
123
+ this.logger.log('socket close %j ', event);
124
+ };
125
+ this.socket = new WebSocket(url);
126
+ this.socket.binaryType = 'arraybuffer';
127
+ this.socket.onopen = onopen;
128
+ this.socket.onmessage = onmessage;
129
+ this.socket.onerror = onerror;
130
+ this.socket.onclose = onclose;
131
+ }
132
+ ;
133
+ disconnect() {
134
+ if (this.socket) {
135
+ if (this.socket.disconnect)
136
+ this.socket.disconnect();
137
+ if (this.socket.close)
138
+ this.socket.close();
139
+ this.logger.log('disconnect');
140
+ this.socket = null;
141
+ }
142
+ if (this.heartbeatId) {
143
+ clearTimeout(this.heartbeatId);
144
+ this.heartbeatId = null;
145
+ }
146
+ if (this.heartbeatTimeoutId) {
147
+ clearTimeout(this.heartbeatTimeoutId);
148
+ this.heartbeatTimeoutId = null;
149
+ }
150
+ }
151
+ ;
152
+ request(route, msg) {
153
+ return new Promise((resolve, reject) => {
154
+ msg = msg || {};
155
+ route = route || msg.route;
156
+ if (!route) {
157
+ this.logger.log('fail to send request without route.');
158
+ return;
159
+ }
160
+ this.reqId++;
161
+ this.sendMessage(this.reqId, route, msg);
162
+ this.callbacks[this.reqId] = resolve;
163
+ this.routeMap[this.reqId] = route;
164
+ });
165
+ }
166
+ ;
167
+ notify(route, msg) {
168
+ msg = msg || {};
169
+ this.sendMessage(0, route, msg);
170
+ }
171
+ ;
172
+ sendMessage(reqId, route, msg) {
173
+ const type = reqId ? melo_protocol_1.Message.TYPE_REQUEST : melo_protocol_1.Message.TYPE_NOTIFY;
174
+ if (this.showPackageLog) {
175
+ this.logger.log('send', reqId, route, msg);
176
+ }
177
+ //compress message by protobuf
178
+ const protos = !!this.data.protos ? this.data.protos.client : {};
179
+ if (!!protos[route]) {
180
+ msg = this.protobuf.encode(route, msg);
181
+ }
182
+ else {
183
+ msg = melo_protocol_1.Protocol.strencode(JSON.stringify(msg));
184
+ }
185
+ let compressRoute = false;
186
+ if (this.data.dict && this.data.dict[route]) {
187
+ route = this.data.dict[route];
188
+ compressRoute = true;
189
+ }
190
+ msg = melo_protocol_1.Message.encode(reqId, type, compressRoute, route, msg);
191
+ const packet = melo_protocol_1.Package.encode(melo_protocol_1.Package.TYPE_DATA, msg);
192
+ if (this.showPackageLog) {
193
+ this.logger.log('send', "packet", packet.length, packet.toString('hex'));
194
+ }
195
+ this.send(packet);
196
+ }
197
+ ;
198
+ send(packet) {
199
+ if (!!this.socket) {
200
+ this.socket.send(packet.buffer || packet, { binary: true, mask: true });
201
+ }
202
+ }
203
+ ;
204
+ heartbeat(data) {
205
+ const obj = melo_protocol_1.Package.encode(melo_protocol_1.Package.TYPE_HEARTBEAT);
206
+ if (this.heartbeatTimeoutId) {
207
+ clearTimeout(this.heartbeatTimeoutId);
208
+ this.heartbeatTimeoutId = null;
209
+ }
210
+ if (this.heartbeatId) {
211
+ // already in a heartbeat interval
212
+ return;
213
+ }
214
+ this.heartbeatId = setTimeout(() => {
215
+ this.heartbeatId = null;
216
+ this.send(obj);
217
+ this.nextHeartbeatTimeout = Date.now() + this.heartbeatTimeout;
218
+ this.heartbeatTimeoutId = setTimeout(this.heartbeatTimeoutCb.bind(this), this.heartbeatTimeout);
219
+ }, this.heartbeatInterval);
220
+ }
221
+ ;
222
+ heartbeatTimeoutCb() {
223
+ const gap = this.nextHeartbeatTimeout - Date.now();
224
+ if (gap > this.gapThreshold) {
225
+ this.heartbeatTimeoutId = setTimeout(this.heartbeatTimeoutCb.bind(this), gap);
226
+ }
227
+ else {
228
+ this.logger.error('server heartbeat timeout');
229
+ this.emit('heartbeat timeout');
230
+ this.disconnect();
231
+ }
232
+ }
233
+ ;
234
+ handshake(data) {
235
+ data = JSON.parse(melo_protocol_1.Protocol.strdecode(data));
236
+ if (data.code === RES_OLD_CLIENT) {
237
+ this.emit('error', 'client version not fullfill');
238
+ return;
239
+ }
240
+ if (data.code !== RES_OK) {
241
+ this.emit('error', 'handshake fail');
242
+ return;
243
+ }
244
+ this.handshakeInit(data);
245
+ const obj = melo_protocol_1.Package.encode(melo_protocol_1.Package.TYPE_HANDSHAKE_ACK);
246
+ this.send(obj);
247
+ if (this.initCallback) {
248
+ this.initCallback(this.socket);
249
+ this.initCallback = null;
250
+ }
251
+ }
252
+ ;
253
+ onData(data) {
254
+ //probuff decode
255
+ const msg = melo_protocol_1.Message.decode(data);
256
+ if (msg.id > 0) {
257
+ msg.route = this.routeMap[msg.id];
258
+ delete this.routeMap[msg.id];
259
+ if (!msg.route) {
260
+ return;
261
+ }
262
+ }
263
+ msg.body = this.deCompose(msg);
264
+ if (this.showPackageLog) {
265
+ this.logger.log('recv', JSON.stringify(msg), "\n\tpacket", data.length, data.toString('hex'));
266
+ }
267
+ this.processMessage(msg);
268
+ }
269
+ ;
270
+ onKick(data) {
271
+ this.emit('onKick', data.toString());
272
+ }
273
+ ;
274
+ processPackage(msg) {
275
+ if (Array.isArray(msg)) {
276
+ for (let m of msg) {
277
+ this.handlers[m.type](m.body);
278
+ }
279
+ }
280
+ else {
281
+ this.handlers[msg.type](msg.body);
282
+ }
283
+ }
284
+ ;
285
+ processMessage(msg) {
286
+ if (!msg || !msg.id) {
287
+ // server push message
288
+ // this.logger.error('processMessage error!!!');
289
+ this.emit(msg.route, msg.body);
290
+ return;
291
+ }
292
+ //if have a id then find the callback function with the request
293
+ const cb = this.callbacks[msg.id];
294
+ delete this.callbacks[msg.id];
295
+ if (typeof cb !== 'function') {
296
+ return;
297
+ }
298
+ cb(msg.body);
299
+ return;
300
+ }
301
+ ;
302
+ processMessageBatch(pomelo, msgs) {
303
+ for (let i = 0, l = msgs.length; i < l; i++) {
304
+ this.processMessage(msgs[i]);
305
+ }
306
+ }
307
+ ;
308
+ deCompose(msg) {
309
+ const protos = !!this.data.protos ? this.data.protos.server : {};
310
+ const abbrs = this.data.abbrs;
311
+ let route = msg.route;
312
+ try {
313
+ //Decompose route from dict
314
+ if (msg.compressRoute) {
315
+ if (!abbrs[route]) {
316
+ this.logger.error('illegal msg!');
317
+ return {};
318
+ }
319
+ route = msg.route = abbrs[route];
320
+ }
321
+ if (!!protos[route]) {
322
+ return this.protobuf.decode(route, msg.body);
323
+ }
324
+ else {
325
+ return JSON.parse(melo_protocol_1.Protocol.strdecode(msg.body));
326
+ }
327
+ }
328
+ catch (ex) {
329
+ this.logger.error('route, body = ' + route + ", " + msg.body);
330
+ }
331
+ return msg;
332
+ }
333
+ ;
334
+ handshakeInit(data) {
335
+ if (data.sys && data.sys.heartbeat) {
336
+ this.heartbeatInterval = data.sys.heartbeat * 1000; // heartbeat interval
337
+ this.heartbeatTimeout = this.heartbeatInterval * 2; // max heartbeat timeout
338
+ }
339
+ else {
340
+ this.heartbeatInterval = 0;
341
+ this.heartbeatTimeout = 0;
342
+ }
343
+ this.initData(data);
344
+ if (typeof this.handshakeCallback === 'function') {
345
+ this.handshakeCallback(data.user);
346
+ }
347
+ }
348
+ ;
349
+ //Initilize data used in pomelo client
350
+ initData(data) {
351
+ if (!data || !data.sys) {
352
+ return;
353
+ }
354
+ const dictVersion = data.sys.dictVersion;
355
+ const protoVersion = data.sys.protos ? data.sys.protos.version : null;
356
+ let changed = false;
357
+ const dict = data.sys.dict || this.sysCache.dict;
358
+ const protos = data.sys.protos || this.sysCache.protos;
359
+ if (dictVersion) {
360
+ this.sysCache.dict = dict;
361
+ this.sysCache.dictVersion = dictVersion;
362
+ changed = true;
363
+ }
364
+ if (protoVersion) {
365
+ this.sysCache.protos = protos;
366
+ this.sysCache.protoVersion = protoVersion;
367
+ changed = true;
368
+ }
369
+ if (changed) {
370
+ cacheClass_1.cacheClass.saveCache(this.sysCache);
371
+ }
372
+ //Init compress dict
373
+ if (!!dict) {
374
+ this.data.dict = dict;
375
+ this.data.abbrs = {};
376
+ for (const route in dict) {
377
+ this.data.abbrs[dict[route]] = route;
378
+ }
379
+ }
380
+ //Init protobuf protos
381
+ if (!!protos) {
382
+ this.data.protos = {
383
+ server: protos.server || {},
384
+ client: protos.client || {}
385
+ };
386
+ if (!this.protobuf) {
387
+ // 要改WEB JS客户端的话 这里可能需要改一下。
388
+ this.protobuf = new melo_protobuf_1.Protobuf({ encoderProtos: protos.client, decoderProtos: protos.server });
389
+ }
390
+ }
391
+ }
392
+ ;
393
+ }
394
+ exports.Pomelo = Pomelo;
395
+ Pomelo.ClientId = 0;
396
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vbm9kZWpzLXRzLWNsaWVudC9jbGllbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsZ0NBQWdDO0FBQ2hDLDZEQUFxRTtBQUNyRSw2REFBbUQ7QUFDbkQsbUNBQW9DO0FBQ3BDLDZDQUF3QztBQUN4QywyQ0FBdUM7QUFFdkMsTUFBTSxpQkFBaUIsR0FBRyxPQUFPLENBQUM7QUFDbEMsTUFBTSxvQkFBb0IsR0FBRyxPQUFPLENBQUM7QUFFckMsTUFBTSxNQUFNLEdBQUcsR0FBRyxDQUFDO0FBQ25CLE1BQU0sY0FBYyxHQUFHLEdBQUcsQ0FBQztBQUMzQixNQUFNLGVBQWUsR0FBRyxHQUFHLENBQUM7QUFDNUIsTUFBTSxpQkFBaUIsR0FBRyxHQUFHLENBQUM7QUF3QjlCLE1BQWEsTUFBTyxTQUFRLHFCQUFZO0lBcUNwQyxZQUFZLGFBQWEsR0FBRyxJQUFJLEVBQW1CLGlCQUEwQixJQUFJO1FBQzdFLEtBQUssRUFBRSxDQUFDO1FBRHVDLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQXBDakYsV0FBTSxHQUFHLElBQUksQ0FBQztRQUNkLFVBQUssR0FBRyxDQUFDLENBQUM7UUFDVixjQUFTLEdBQUcsRUFBRSxDQUFDO1FBQ2YsYUFBUSxHQUFHLEVBQUUsQ0FBQztRQUNkLGFBQVEsR0FBRyxFQUFFLENBQUM7UUFDZCxhQUFRLEdBQWEsSUFBSSxDQUFDO1FBQzFCLHNCQUFpQixHQUFHLElBQUksQ0FBQztRQUN6QixxQkFBZ0IsR0FBRyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsQ0FBQyxDQUFDO1FBQzlDLHlCQUFvQixHQUFHLENBQUMsQ0FBQztRQUN6QixpQkFBWSxHQUFHLEdBQUcsQ0FBQyxDQUFDLDBCQUEwQjtRQUM5QyxnQkFBVyxHQUFHLElBQUksQ0FBQztRQUNuQix1QkFBa0IsR0FBRyxJQUFJLENBQUM7UUFFMUIsc0JBQWlCLEdBQUcsSUFBSSxDQUFDO1FBR3pCLG9C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
@@ -0,0 +1,59 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Logger = void 0;
4
+ const clc = require("cli-color");
5
+ class Logger {
6
+ constructor(context, isTimeDiffEnabled = false) {
7
+ this.context = context;
8
+ this.isTimeDiffEnabled = isTimeDiffEnabled;
9
+ }
10
+ log(message) {
11
+ const { logger } = Logger;
12
+ logger.log.call(logger, message, this.context, this.isTimeDiffEnabled);
13
+ }
14
+ error(message, trace = '') {
15
+ const { logger } = Logger;
16
+ logger.error.call(logger, message, trace, this.context, this.isTimeDiffEnabled);
17
+ }
18
+ warn(message) {
19
+ const { logger } = Logger;
20
+ logger.warn.call(logger, message, this.context, this.isTimeDiffEnabled);
21
+ }
22
+ static overrideLogger(logger) {
23
+ this.logger = logger;
24
+ }
25
+ static log(message, context = '', isTimeDiffEnabled = true) {
26
+ this.printMessage(message, clc.green, context, isTimeDiffEnabled);
27
+ }
28
+ static error(message, trace = '', context = '', isTimeDiffEnabled = true) {
29
+ this.printMessage(message, clc.red, context, isTimeDiffEnabled);
30
+ this.printStackTrace(trace);
31
+ }
32
+ static warn(message, context = '', isTimeDiffEnabled = true) {
33
+ this.printMessage(message, clc.yellow, context, isTimeDiffEnabled);
34
+ }
35
+ static printMessage(message, color, context = '', isTimeDiffEnabled) {
36
+ process.stdout.write(color(`${process.pid} - `));
37
+ process.stdout.write(`${new Date().toLocaleString()} `);
38
+ process.stdout.write(this.yellow(`[${context}] `));
39
+ process.stdout.write(color(message));
40
+ this.printTimestamp(isTimeDiffEnabled);
41
+ process.stdout.write(`\n`);
42
+ }
43
+ static printTimestamp(isTimeDiffEnabled) {
44
+ const includeTimestamp = Logger.prevTimestamp && isTimeDiffEnabled;
45
+ if (includeTimestamp) {
46
+ process.stdout.write(this.yellow(` +${Date.now() - Logger.prevTimestamp}ms`));
47
+ }
48
+ Logger.prevTimestamp = Date.now();
49
+ }
50
+ static printStackTrace(trace) {
51
+ process.stdout.write(trace);
52
+ process.stdout.write(`\n`);
53
+ }
54
+ }
55
+ exports.Logger = Logger;
56
+ Logger.prevTimestamp = null;
57
+ Logger.logger = Logger;
58
+ Logger.yellow = clc.xterm(3);
59
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nZ2VyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9ub2RlanMtdHMtY2xpZW50L2xvZ2dlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLGlDQUFpQztBQVVqQyxNQUFhLE1BQU07SUFNZixZQUNxQixPQUFlLEVBQ2Ysb0JBQW9CLEtBQUs7UUFEekIsWUFBTyxHQUFQLE9BQU8sQ0FBUTtRQUNmLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBUTtJQUMxQyxDQUFDO0lBRUwsR0FBRyxDQUFDLE9BQWU7UUFDZixNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsTUFBTSxDQUFDO1FBQ3pCLE1BQXdCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FDOUIsTUFBTSxFQUNOLE9BQU8sRUFDUCxJQUFJLENBQUMsT0FBTyxFQUNaLElBQUksQ0FBQyxpQkFBaUIsQ0FDekIsQ0FBQztJQUNOLENBQUM7SUFFRCxLQUFLLENBQUMsT0FBZSxFQUFFLEtBQUssR0FBRyxFQUFFO1FBQzdCLE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxNQUFNLENBQUM7UUFDekIsTUFBd0IsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUNoQyxNQUFNLEVBQ04sT0FBTyxFQUNQLEtBQUssRUFDTCxJQUFJLENBQUMsT0FBTyxFQUNaLElBQUksQ0FBQyxpQkFBaUIsQ0FDekIsQ0FBQztJQUNOLENBQUM7SUFFRCxJQUFJLENBQUMsT0FBZTtRQUNoQixNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsTUFBTSxDQUFDO1FBQ3pCLE1BQXdCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FDL0IsTUFBTSxFQUNOLE9BQU8sRUFDUCxJQUFJLENBQUMsT0FBTyxFQUNaLElBQUksQ0FBQyxpQkFBaUIsQ0FDekIsQ0FBQztJQUNOLENBQUM7SUFFRCxNQUFNLENBQUMsY0FBYyxDQUFDLE1BQXFCO1FBQ3ZDLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO0lBQ3pCLENB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