@bigtyphoon/melo 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/LICENSE +22 -0
- package/README.md +55 -0
- package/bin/commadtest.ts +10 -0
- package/bin/commands/add.ts +43 -0
- package/bin/commands/init.ts +292 -0
- package/bin/commands/kill.ts +21 -0
- package/bin/commands/list.ts +60 -0
- package/bin/commands/masterha.ts +40 -0
- package/bin/commands/restart.ts +48 -0
- package/bin/commands/start.ts +65 -0
- package/bin/commands/stop.ts +26 -0
- package/bin/melo.ts +30 -0
- package/bin/utils/constants.ts +27 -0
- package/bin/utils/utils.ts +130 -0
- package/dist/bin/commadtest.js +9 -0
- package/dist/bin/commands/add.js +40 -0
- package/dist/bin/commands/init.js +279 -0
- package/dist/bin/commands/kill.js +21 -0
- package/dist/bin/commands/list.js +65 -0
- package/dist/bin/commands/masterha.js +36 -0
- package/dist/bin/commands/restart.js +45 -0
- package/dist/bin/commands/start.js +58 -0
- package/dist/bin/commands/stop.js +20 -0
- package/dist/bin/melo.js +26 -0
- package/dist/bin/utils/constants.js +28 -0
- package/dist/bin/utils/utils.js +134 -0
- package/dist/lib/application.js +888 -0
- package/dist/lib/common/manager/appManager.js +112 -0
- package/dist/lib/common/manager/taskManager.js +39 -0
- package/dist/lib/common/remote/backend/msgRemote.js +63 -0
- package/dist/lib/common/remote/frontend/channelRemote.js +78 -0
- package/dist/lib/common/remote/frontend/sessionRemote.js +76 -0
- package/dist/lib/common/service/backendSessionService.js +337 -0
- package/dist/lib/common/service/channelService.js +514 -0
- package/dist/lib/common/service/connectionService.js +95 -0
- package/dist/lib/common/service/filterService.js +112 -0
- package/dist/lib/common/service/handlerService.js +187 -0
- package/dist/lib/common/service/sessionService.js +610 -0
- package/dist/lib/components/backendSession.js +14 -0
- package/dist/lib/components/channel.js +13 -0
- package/dist/lib/components/connection.js +12 -0
- package/dist/lib/components/connector.js +437 -0
- package/dist/lib/components/dictionary.js +93 -0
- package/dist/lib/components/master.js +39 -0
- package/dist/lib/components/monitor.js +25 -0
- package/dist/lib/components/protobuf.js +156 -0
- package/dist/lib/components/proxy.js +236 -0
- package/dist/lib/components/pushScheduler.js +62 -0
- package/dist/lib/components/remote.js +127 -0
- package/dist/lib/components/server.js +63 -0
- package/dist/lib/components/session.js +20 -0
- package/dist/lib/connectors/commands/handshake.js +119 -0
- package/dist/lib/connectors/commands/heartbeat.js +67 -0
- package/dist/lib/connectors/commands/kick.js +15 -0
- package/dist/lib/connectors/common/coder.js +90 -0
- package/dist/lib/connectors/common/handler.js +57 -0
- package/dist/lib/connectors/hybrid/IHybridSocket.js +3 -0
- package/dist/lib/connectors/hybrid/switcher.js +100 -0
- package/dist/lib/connectors/hybrid/tcpprocessor.js +40 -0
- package/dist/lib/connectors/hybrid/tcpsocket.js +171 -0
- package/dist/lib/connectors/hybrid/wsprocessor.js +49 -0
- package/dist/lib/connectors/hybridconnector.js +89 -0
- package/dist/lib/connectors/hybridsocket.js +139 -0
- package/dist/lib/connectors/mqtt/generate.js +113 -0
- package/dist/lib/connectors/mqtt/mqttadaptor.js +81 -0
- package/dist/lib/connectors/mqtt/protocol.js +48 -0
- package/dist/lib/connectors/mqttconnector.js +107 -0
- package/dist/lib/connectors/mqttsocket.js +59 -0
- package/dist/lib/connectors/sioconnector.js +135 -0
- package/dist/lib/connectors/siosocket.js +69 -0
- package/dist/lib/connectors/udpconnector.js +76 -0
- package/dist/lib/connectors/udpsocket.js +93 -0
- package/dist/lib/filters/handler/serial.js +44 -0
- package/dist/lib/filters/handler/time.js +32 -0
- package/dist/lib/filters/handler/timeout.js +45 -0
- package/dist/lib/filters/handler/toobusy.js +36 -0
- package/dist/lib/filters/rpc/rpcLog.js +43 -0
- package/dist/lib/filters/rpc/toobusy.js +41 -0
- package/dist/lib/index.js +81 -0
- package/dist/lib/interfaces/IComponent.js +3 -0
- package/dist/lib/interfaces/IConnector.js +3 -0
- package/dist/lib/interfaces/IHandlerFilter.js +3 -0
- package/dist/lib/interfaces/ILifeCycle.js +3 -0
- package/dist/lib/interfaces/IPlugin.js +3 -0
- package/dist/lib/interfaces/IPushScheduler.js +3 -0
- package/dist/lib/interfaces/ISocket.js +3 -0
- package/dist/lib/interfaces/IStore.js +3 -0
- package/dist/lib/interfaces/define.js +3 -0
- package/dist/lib/master/master.js +129 -0
- package/dist/lib/master/starter.js +236 -0
- package/dist/lib/master/watchdog.js +120 -0
- package/dist/lib/melo.js +125 -0
- package/dist/lib/modules/console.js +436 -0
- package/dist/lib/modules/masterwatcher.js +98 -0
- package/dist/lib/modules/monitorwatcher.js +124 -0
- package/dist/lib/modules/onlineUser.js +69 -0
- package/dist/lib/modules/restartNotifyModule.js +107 -0
- package/dist/lib/modules/watchServer.js +737 -0
- package/dist/lib/monitor/monitor.js +80 -0
- package/dist/lib/pushSchedulers/buffer.js +96 -0
- package/dist/lib/pushSchedulers/direct.js +58 -0
- package/dist/lib/pushSchedulers/multi.js +80 -0
- package/dist/lib/server/server.js +500 -0
- package/dist/lib/util/appUtil.js +306 -0
- package/dist/lib/util/constants.js +117 -0
- package/dist/lib/util/countDownLatch.js +51 -0
- package/dist/lib/util/events.js +20 -0
- package/dist/lib/util/handlerHelper.js +8 -0
- package/dist/lib/util/log.js +14 -0
- package/dist/lib/util/moduleUtil.js +101 -0
- package/dist/lib/util/pathUtil.js +134 -0
- package/dist/lib/util/remoterHelper.js +8 -0
- package/dist/lib/util/utils.js +358 -0
- package/dist/test/application.js +522 -0
- package/dist/test/config/log4js.json +28 -0
- package/dist/test/config/master.json +9 -0
- package/dist/test/config/servers.json +6 -0
- package/dist/test/filters/handler/serial.js +41 -0
- package/dist/test/filters/handler/time.js +41 -0
- package/dist/test/filters/handler/timeout.js +41 -0
- package/dist/test/filters/handler/toobusy.js +57 -0
- package/dist/test/filters/rpc/rpcLog.js +22 -0
- package/dist/test/filters/rpc/toobusy.js +39 -0
- package/dist/test/manager/mockChannelManager.js +77 -0
- package/dist/test/manager/taskManager.js +68 -0
- package/dist/test/mock-base/app/servers/other-file +0 -0
- package/dist/test/mock-plugin/components/mockPlugin.js +10 -0
- package/dist/test/mock-plugin/events/mockEvent.js +12 -0
- package/dist/test/modules/console.js +242 -0
- package/dist/test/pomelo.js +19 -0
- package/dist/test/remote/channelRemote.js +159 -0
- package/dist/test/service/channel.js +134 -0
- package/dist/test/service/channelService.js +216 -0
- package/dist/test/service/connectionService.js +114 -0
- package/dist/test/service/filterService.js +144 -0
- package/dist/test/service/handlerService.js +65 -0
- package/dist/test/service/sessionService.js +387 -0
- package/dist/test/util/countDownLatch.js +70 -0
- package/dist/test/util/pathUtil.js +108 -0
- package/dist/test/util/utils.js +140 -0
- package/lib/application.ts +1240 -0
- package/lib/common/manager/appManager.ts +118 -0
- package/lib/common/manager/taskManager.ts +50 -0
- package/lib/common/remote/backend/msgRemote.ts +134 -0
- package/lib/common/remote/frontend/channelRemote.ts +91 -0
- package/lib/common/remote/frontend/sessionRemote.ts +91 -0
- package/lib/common/service/backendSessionService.ts +388 -0
- package/lib/common/service/channelService.ts +609 -0
- package/lib/common/service/connectionService.ts +112 -0
- package/lib/common/service/filterService.ts +118 -0
- package/lib/common/service/handlerService.ts +224 -0
- package/lib/common/service/sessionService.ts +731 -0
- package/lib/components/backendSession.ts +14 -0
- package/lib/components/channel.ts +11 -0
- package/lib/components/connection.ts +13 -0
- package/lib/components/connector.ts +533 -0
- package/lib/components/dictionary.ts +121 -0
- package/lib/components/master.ts +41 -0
- package/lib/components/monitor.ts +30 -0
- package/lib/components/protobuf.ts +208 -0
- package/lib/components/proxy.ts +282 -0
- package/lib/components/pushScheduler.ts +70 -0
- package/lib/components/remote.ts +166 -0
- package/lib/components/server.ts +71 -0
- package/lib/components/session.ts +22 -0
- package/lib/connectors/commands/handshake.ts +155 -0
- package/lib/connectors/commands/heartbeat.ts +83 -0
- package/lib/connectors/commands/kick.ts +11 -0
- package/lib/connectors/common/coder.ts +93 -0
- package/lib/connectors/common/handler.ts +62 -0
- package/lib/connectors/hybrid/IHybridSocket.ts +9 -0
- package/lib/connectors/hybrid/switcher.ts +142 -0
- package/lib/connectors/hybrid/tcpprocessor.ts +43 -0
- package/lib/connectors/hybrid/tcpsocket.ts +223 -0
- package/lib/connectors/hybrid/wsprocessor.ts +57 -0
- package/lib/connectors/hybridconnector.ts +134 -0
- package/lib/connectors/hybridsocket.ts +168 -0
- package/lib/connectors/mqtt/generate.ts +103 -0
- package/lib/connectors/mqtt/mqttadaptor.ts +114 -0
- package/lib/connectors/mqtt/protocol.ts +49 -0
- package/lib/connectors/mqttconnector.ts +134 -0
- package/lib/connectors/mqttsocket.ts +79 -0
- package/lib/connectors/sioconnector.ts +161 -0
- package/lib/connectors/siosocket.ts +85 -0
- package/lib/connectors/udpconnector.ts +113 -0
- package/lib/connectors/udpsocket.ts +110 -0
- package/lib/filters/handler/serial.ts +46 -0
- package/lib/filters/handler/time.ts +35 -0
- package/lib/filters/handler/timeout.ts +50 -0
- package/lib/filters/handler/toobusy.ts +37 -0
- package/lib/filters/rpc/rpcLog.ts +42 -0
- package/lib/filters/rpc/toobusy.ts +41 -0
- package/lib/index.ts +74 -0
- package/lib/interfaces/IComponent.ts +47 -0
- package/lib/interfaces/IConnector.ts +20 -0
- package/lib/interfaces/IHandlerFilter.ts +15 -0
- package/lib/interfaces/ILifeCycle.ts +16 -0
- package/lib/interfaces/IPlugin.ts +65 -0
- package/lib/interfaces/IPushScheduler.ts +52 -0
- package/lib/interfaces/ISocket.ts +26 -0
- package/lib/interfaces/IStore.ts +10 -0
- package/lib/interfaces/define.ts +15 -0
- package/lib/master/master.ts +148 -0
- package/lib/master/starter.ts +234 -0
- package/lib/master/watchdog.ts +135 -0
- package/lib/melo.ts +152 -0
- package/lib/modules/console.ts +465 -0
- package/lib/modules/masterwatcher.ts +120 -0
- package/lib/modules/monitorwatcher.ts +151 -0
- package/lib/modules/onlineUser.ts +78 -0
- package/lib/modules/restartNotifyModule.ts +128 -0
- package/lib/modules/watchServer.ts +766 -0
- package/lib/monitor/monitor.ts +99 -0
- package/lib/pushSchedulers/buffer.ts +117 -0
- package/lib/pushSchedulers/direct.ts +65 -0
- package/lib/pushSchedulers/multi.ts +94 -0
- package/lib/server/server.ts +554 -0
- package/lib/util/appUtil.ts +313 -0
- package/lib/util/constants.ts +154 -0
- package/lib/util/countDownLatch.ts +72 -0
- package/lib/util/events.ts +15 -0
- package/lib/util/handlerHelper.ts +5 -0
- package/lib/util/log.ts +11 -0
- package/lib/util/moduleUtil.ts +110 -0
- package/lib/util/pathUtil.ts +132 -0
- package/lib/util/remoterHelper.ts +68 -0
- package/lib/util/utils.ts +365 -0
- package/package.json +93 -0
- package/template/game-server/.vscode/launch.json +27 -0
- package/template/game-server/app/servers/connector/handler/entryHandler.ts +50 -0
- package/template/game-server/app/servers/connector/remote/authRemoter.ts +36 -0
- package/template/game-server/app.ts +30 -0
- package/template/game-server/app.ts.mqtt +32 -0
- package/template/game-server/app.ts.sio +36 -0
- package/template/game-server/app.ts.sio.wss +34 -0
- package/template/game-server/app.ts.udp +31 -0
- package/template/game-server/app.ts.wss +40 -0
- package/template/game-server/config/adminServer.json +5 -0
- package/template/game-server/config/adminUser.json +22 -0
- package/template/game-server/config/clientProtos.json +1 -0
- package/template/game-server/config/dictionary.json +1 -0
- package/template/game-server/config/log4js.json +150 -0
- package/template/game-server/config/master.json +8 -0
- package/template/game-server/config/serverProtos.json +1 -0
- package/template/game-server/config/servers.json +12 -0
- package/template/game-server/copy.js +5 -0
- package/template/game-server/package.json +28 -0
- package/template/game-server/preload.ts +40 -0
- package/template/game-server/tsconfig.json +36 -0
- package/template/npm-install.bat +4 -0
- package/template/npm-install.sh +5 -0
- package/template/readme.md +31 -0
- package/template/shared/server.crt +15 -0
- package/template/shared/server.key +15 -0
- package/template/web-server/app.js +25 -0
- package/template/web-server/app.js.https +36 -0
- package/template/web-server/bin/component.bat +1 -0
- package/template/web-server/bin/component.sh +1 -0
- package/template/web-server/package.json +10 -0
- package/template/web-server/public/css/base.css +76 -0
- package/template/web-server/public/image/logo.png +0 -0
- package/template/web-server/public/image/sp.png +0 -0
- package/template/web-server/public/index.html +57 -0
- package/template/web-server/public/index.html.sio +58 -0
- package/template/web-server/public/js/lib/build/build.js +1730 -0
- package/template/web-server/public/js/lib/build/build.js.wss +1721 -0
- package/template/web-server/public/js/lib/component.json +6 -0
- package/template/web-server/public/js/lib/local/boot/component.json +11 -0
- package/template/web-server/public/js/lib/local/boot/index.js +11 -0
- package/template/web-server/public/js/lib/meloclient.js +456 -0
- package/template/web-server/public/js/lib/meloclient.js.wss +456 -0
- package/template/web-server/public/js/lib/socket.io.js +3 -0
- package/test/application.ts +607 -0
- package/test/filters/handler/serial.ts +47 -0
- package/test/filters/handler/time.ts +47 -0
- package/test/filters/handler/timeout.ts +46 -0
- package/test/filters/handler/toobusy.ts +59 -0
- package/test/filters/rpc/rpcLog.ts +20 -0
- package/test/filters/rpc/toobusy.ts +40 -0
- package/test/manager/mockChannelManager.ts +92 -0
- package/test/manager/taskManager.ts +78 -0
- package/test/mock-base/app/servers/other-file +0 -0
- package/test/mock-plugin/components/mockPlugin.ts +8 -0
- package/test/mock-plugin/events/mockEvent.ts +12 -0
- package/test/modules/console.ts +264 -0
- package/test/pomelo.ts +18 -0
- package/test/remote/channelRemote.ts +176 -0
- package/test/service/channel.ts +161 -0
- package/test/service/channelService.ts +243 -0
- package/test/service/connectionService.ts +142 -0
- package/test/service/filterService.ts +165 -0
- package/test/service/handlerService.ts +77 -0
- package/test/service/sessionService.ts +464 -0
- package/test/util/countDownLatch.ts +81 -0
- package/test/util/pathUtil.ts +122 -0
- package/test/util/utils.ts +165 -0
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ServerComponent = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Component for server starup.
|
|
6
|
+
*/
|
|
7
|
+
const server_1 = require("../server/server");
|
|
8
|
+
/**
|
|
9
|
+
* Server component class
|
|
10
|
+
*
|
|
11
|
+
* @param {Object} app current application context
|
|
12
|
+
*/
|
|
13
|
+
class ServerComponent {
|
|
14
|
+
constructor(app, opts) {
|
|
15
|
+
this.name = '__server__';
|
|
16
|
+
this.server = (0, server_1.create)(app, opts);
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Component lifecycle callback
|
|
20
|
+
*
|
|
21
|
+
* @param {Function} cb
|
|
22
|
+
* @return {Void}
|
|
23
|
+
*/
|
|
24
|
+
start(cb) {
|
|
25
|
+
this.server.start();
|
|
26
|
+
process.nextTick(cb);
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Component lifecycle callback
|
|
30
|
+
*
|
|
31
|
+
* @param {Function} cb
|
|
32
|
+
* @return {Void}
|
|
33
|
+
*/
|
|
34
|
+
afterStart(cb) {
|
|
35
|
+
this.server.afterStart();
|
|
36
|
+
process.nextTick(cb);
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Component lifecycle function
|
|
40
|
+
*
|
|
41
|
+
* @param {Boolean} force whether stop the component immediately
|
|
42
|
+
* @param {Function} cb
|
|
43
|
+
* @return {Void}
|
|
44
|
+
*/
|
|
45
|
+
stop(force, cb) {
|
|
46
|
+
this.server.stop();
|
|
47
|
+
process.nextTick(cb);
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Proxy server handle
|
|
51
|
+
*/
|
|
52
|
+
handle(msg, session, cb) {
|
|
53
|
+
this.server.handle(msg, session, cb);
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Proxy server global handle
|
|
57
|
+
*/
|
|
58
|
+
globalHandle(msg, session, cb) {
|
|
59
|
+
this.server.globalHandle(msg, session, cb);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
exports.ServerComponent = ServerComponent;
|
|
63
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vbGliL2NvbXBvbmVudHMvc2VydmVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBOztHQUVHO0FBQ0gsNkNBQTRHO0FBTzVHOzs7O0dBSUc7QUFDSCxNQUFhLGVBQWU7SUFFeEIsWUFBWSxHQUFnQixFQUFFLElBQW1CO1FBR2pELFNBQUksR0FBRyxZQUFZLENBQUM7UUFGaEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFBLGVBQVksRUFBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUdEOzs7OztPQUtHO0lBQ0gsS0FBSyxDQUFDLEVBQWM7UUFDaEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNwQixPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3pCLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILFVBQVUsQ0FBQyxFQUFjO1FBQ3JCLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDekIsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUN6QixDQUFDO0lBR0Q7Ozs7OztPQU1HO0lBQ0gsSUFBSSxDQUFDLEtBQWMsRUFBRSxFQUFjO1FBQy9CLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDbkIsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUN6QixDQUFDO0lBRUQ7O09BRUc7SUFDSCxNQUFNLENBQUMsR0FBUSxFQUFFLE9BQWlDLEVBQUUsRUFBbUI7UUFDbkUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxZQUFZLENBQUMsR0FBUSxFQUFFLE9BQWlDLEVBQUUsRUFBbUI7UUFDekUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQztJQUMvQyxDQUFDO0NBQ0o7QUF2REQsMENBdURDIn0=
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SessionComponent = void 0;
|
|
4
|
+
const sessionService_1 = require("../common/service/sessionService");
|
|
5
|
+
/**
|
|
6
|
+
* Session component. Manage sessions.
|
|
7
|
+
*
|
|
8
|
+
* @param {Object} app current application context
|
|
9
|
+
* @param {Object} opts attach parameters
|
|
10
|
+
*/
|
|
11
|
+
class SessionComponent extends sessionService_1.SessionService {
|
|
12
|
+
constructor(app, opts) {
|
|
13
|
+
super(opts);
|
|
14
|
+
this.name = '__session__';
|
|
15
|
+
this.app = app;
|
|
16
|
+
app.set('sessionService', this, true);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
exports.SessionComponent = SessionComponent;
|
|
20
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Vzc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9jb21wb25lbnRzL3Nlc3Npb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEscUVBQXlGO0FBS3pGOzs7OztHQUtHO0FBQ0gsTUFBYSxnQkFBaUIsU0FBUSwrQkFBYztJQUVoRCxZQUFZLEdBQWdCLEVBQUUsSUFBNkI7UUFDdkQsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBS2hCLFNBQUksR0FBRyxhQUFhLENBQUM7UUFKakIsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7UUFDZixHQUFHLENBQUMsR0FBRyxDQUFDLGdCQUFnQixFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztJQUMxQyxDQUFDO0NBSUo7QUFWRCw0Q0FVQyJ9
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.HandshakeCommand = void 0;
|
|
4
|
+
const melo_1 = require("../../melo");
|
|
5
|
+
const melo_protocol_1 = require("@bigtyphoon/melo-protocol");
|
|
6
|
+
let CODE_OK = 200;
|
|
7
|
+
let CODE_USE_ERROR = 500;
|
|
8
|
+
let CODE_OLD_CLIENT = 501;
|
|
9
|
+
/**
|
|
10
|
+
* Process the handshake request.
|
|
11
|
+
*
|
|
12
|
+
* @param {Object} opts option parameters
|
|
13
|
+
* opts.handshake(msg, cb(err, resp)) handshake callback. msg is the handshake message from client.
|
|
14
|
+
* opts.hearbeat heartbeat interval (level?)
|
|
15
|
+
* opts.version required client level
|
|
16
|
+
*/
|
|
17
|
+
class HandshakeCommand {
|
|
18
|
+
constructor(opts) {
|
|
19
|
+
opts = opts || {};
|
|
20
|
+
this.userHandshake = opts.handshake;
|
|
21
|
+
if (opts.heartbeat) {
|
|
22
|
+
this.heartbeatSec = opts.heartbeat;
|
|
23
|
+
this.heartbeat = opts.heartbeat * 1000;
|
|
24
|
+
}
|
|
25
|
+
this.checkClient = opts.checkClient;
|
|
26
|
+
this.useDict = opts.useDict;
|
|
27
|
+
this.useProtobuf = opts.useProtobuf;
|
|
28
|
+
this.useCrypto = opts.useCrypto;
|
|
29
|
+
}
|
|
30
|
+
handle(socket, msg) {
|
|
31
|
+
if (!msg.sys) {
|
|
32
|
+
processError(socket, CODE_USE_ERROR);
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
if (typeof this.checkClient === 'function') {
|
|
36
|
+
if (!msg || !msg.sys || !this.checkClient(msg.sys.type, msg.sys.version)) {
|
|
37
|
+
processError(socket, CODE_OLD_CLIENT);
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
let opts = {
|
|
42
|
+
heartbeat: setupHeartbeat(this)
|
|
43
|
+
};
|
|
44
|
+
if (this.useDict) {
|
|
45
|
+
let dictVersion = melo_1.melo.app.components.__dictionary__.getVersion();
|
|
46
|
+
if (!msg.sys.dictVersion || msg.sys.dictVersion !== dictVersion) {
|
|
47
|
+
// may be deprecated in future
|
|
48
|
+
opts.dict = melo_1.melo.app.components.__dictionary__.getDict();
|
|
49
|
+
// 用不到这个。
|
|
50
|
+
// opts.routeToCode = melo.app.components.__dictionary__.getDict();
|
|
51
|
+
// opts.codeToRoute = melo.app.components.__dictionary__.getAbbrs();
|
|
52
|
+
opts.dictVersion = dictVersion;
|
|
53
|
+
}
|
|
54
|
+
opts.useDict = true;
|
|
55
|
+
}
|
|
56
|
+
if (this.useProtobuf) {
|
|
57
|
+
let protoVersion = melo_1.melo.app.components.__protobuf__.getVersion();
|
|
58
|
+
if (!msg.sys.protoVersion || msg.sys.protoVersion !== protoVersion) {
|
|
59
|
+
opts.protos = melo_1.melo.app.components.__protobuf__.getProtos();
|
|
60
|
+
}
|
|
61
|
+
opts.useProto = true;
|
|
62
|
+
}
|
|
63
|
+
if (!!melo_1.melo.app.components.__decodeIO__protobuf__) {
|
|
64
|
+
if (!!this.useProtobuf) {
|
|
65
|
+
throw new Error('protobuf can not be both used in the same project.');
|
|
66
|
+
}
|
|
67
|
+
let component = melo_1.melo.app.components.__decodeIO__protobuf__;
|
|
68
|
+
let version = component.getVersion();
|
|
69
|
+
if (!msg.sys.protoVersion || msg.sys.protoVersion < version) {
|
|
70
|
+
opts.protos = component.getProtos();
|
|
71
|
+
}
|
|
72
|
+
opts.useProto = true;
|
|
73
|
+
}
|
|
74
|
+
if (this.useCrypto) {
|
|
75
|
+
melo_1.melo.app.components.__connector__.setPubKey(socket.id, msg.sys.rsa);
|
|
76
|
+
}
|
|
77
|
+
if (typeof this.userHandshake === 'function') {
|
|
78
|
+
this.userHandshake(msg, function (err, resp) {
|
|
79
|
+
if (err) {
|
|
80
|
+
process.nextTick(function () {
|
|
81
|
+
processError(socket, CODE_USE_ERROR);
|
|
82
|
+
});
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
process.nextTick(function () {
|
|
86
|
+
response(socket, opts, resp);
|
|
87
|
+
});
|
|
88
|
+
}, socket);
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
process.nextTick(function () {
|
|
92
|
+
response(socket, opts);
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
exports.HandshakeCommand = HandshakeCommand;
|
|
97
|
+
let setupHeartbeat = function (self) {
|
|
98
|
+
return self.heartbeatSec;
|
|
99
|
+
};
|
|
100
|
+
let response = function (socket, sys, resp) {
|
|
101
|
+
let res = {
|
|
102
|
+
code: CODE_OK,
|
|
103
|
+
sys: sys
|
|
104
|
+
};
|
|
105
|
+
if (resp) {
|
|
106
|
+
res.user = resp;
|
|
107
|
+
}
|
|
108
|
+
socket.handshakeResponse(melo_protocol_1.Package.encode(melo_protocol_1.Package.TYPE_HANDSHAKE, Buffer.from(JSON.stringify(res))));
|
|
109
|
+
};
|
|
110
|
+
let processError = function (socket, code) {
|
|
111
|
+
let res = {
|
|
112
|
+
code: code
|
|
113
|
+
};
|
|
114
|
+
socket.sendForce(melo_protocol_1.Package.encode(melo_protocol_1.Package.TYPE_HANDSHAKE, Buffer.from(JSON.stringify(res))));
|
|
115
|
+
process.nextTick(function () {
|
|
116
|
+
socket.disconnect();
|
|
117
|
+
});
|
|
118
|
+
};
|
|
119
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFuZHNoYWtlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vbGliL2Nvbm5lY3RvcnMvY29tbWFuZHMvaGFuZHNoYWtlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHFDQUFrQztBQUNsQyw2REFBb0Q7QUFHcEQsSUFBSSxPQUFPLEdBQUcsR0FBRyxDQUFDO0FBQ2xCLElBQUksY0FBYyxHQUFHLEdBQUcsQ0FBQztBQUN6QixJQUFJLGVBQWUsR0FBRyxHQUFHLENBQUM7QUFjMUI7Ozs7Ozs7R0FPRztBQUNILE1BQWEsZ0JBQWdCO0lBU3pCLFlBQVksSUFBNkI7UUFDckMsSUFBSSxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7UUFDbEIsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO1FBRXBDLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUNoQixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7WUFDbkMsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztTQUMxQztRQUVELElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQztRQUVwQyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7UUFDNUIsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDO1FBQ3BDLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUNwQyxDQUFDO0lBRUQsTUFBTSxDQUFDLE1BQWUsRUFBRSxHQUFRO1FBQzVCLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFO1lBQ1YsWUFBWSxDQUFDLE1BQU0sRUFBRSxjQUFjLENBQUMsQ0FBQztZQUNyQyxPQUFPO1NBQ1Y7UUFFRCxJQUFJLE9BQU8sSUFBSSxDQUFDLFdBQVcsS0FBSyxVQUFVLEVBQUU7WUFDeEMsSUFB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
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.HeartbeatCommand = void 0;
|
|
4
|
+
const melo_protocol_1 = require("@bigtyphoon/melo-protocol");
|
|
5
|
+
const melo_logger_1 = require("@bigtyphoon/melo-logger");
|
|
6
|
+
const path = require("path");
|
|
7
|
+
let logger = (0, melo_logger_1.getLogger)('melo', path.basename(__filename));
|
|
8
|
+
/**
|
|
9
|
+
* Process heartbeat request.
|
|
10
|
+
*
|
|
11
|
+
* @param {Object} opts option request
|
|
12
|
+
* opts.heartbeat heartbeat interval
|
|
13
|
+
*/
|
|
14
|
+
class HeartbeatCommand {
|
|
15
|
+
constructor(opts) {
|
|
16
|
+
this.timeouts = {};
|
|
17
|
+
this.clients = {};
|
|
18
|
+
opts = opts || {};
|
|
19
|
+
this.disconnectOnTimeout = opts.disconnectOnTimeout;
|
|
20
|
+
if (opts.heartbeat) {
|
|
21
|
+
this.heartbeat = opts.heartbeat * 1000; // heartbeat interval
|
|
22
|
+
this.timeout = opts.timeout * 1000 || this.heartbeat * 2; // max heartbeat message timeout
|
|
23
|
+
this.disconnectOnTimeout = true;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
handle(socket) {
|
|
27
|
+
if (!this.heartbeat) {
|
|
28
|
+
// no heartbeat setting
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
let self = this;
|
|
32
|
+
if (!this.clients[socket.id]) {
|
|
33
|
+
// clear timers when socket disconnect or error
|
|
34
|
+
this.clients[socket.id] = 1;
|
|
35
|
+
socket.once('disconnect', this.clearTimers.bind(this, socket.id));
|
|
36
|
+
socket.once('error', this.clearTimers.bind(this, socket.id));
|
|
37
|
+
}
|
|
38
|
+
// clear timeout timer
|
|
39
|
+
if (self.disconnectOnTimeout) {
|
|
40
|
+
this.clear(socket.id);
|
|
41
|
+
}
|
|
42
|
+
socket.sendRaw(melo_protocol_1.Package.encode(melo_protocol_1.Package.TYPE_HEARTBEAT));
|
|
43
|
+
if (self.disconnectOnTimeout) {
|
|
44
|
+
self.timeouts[socket.id] = setTimeout(function () {
|
|
45
|
+
logger.info('client %j heartbeat timeout.', socket.id);
|
|
46
|
+
socket.disconnect();
|
|
47
|
+
}, self.timeout);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
clear(id) {
|
|
51
|
+
let tid = this.timeouts[id];
|
|
52
|
+
if (tid) {
|
|
53
|
+
clearTimeout(tid);
|
|
54
|
+
delete this.timeouts[id];
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
clearTimers(id) {
|
|
58
|
+
delete this.clients[id];
|
|
59
|
+
let tid = this.timeouts[id];
|
|
60
|
+
if (tid) {
|
|
61
|
+
clearTimeout(tid);
|
|
62
|
+
delete this.timeouts[id];
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
exports.HeartbeatCommand = HeartbeatCommand;
|
|
67
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVhcnRiZWF0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vbGliL2Nvbm5lY3RvcnMvY29tbWFuZHMvaGVhcnRiZWF0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDZEQUFvRDtBQUNwRCx5REFBb0Q7QUFFcEQsNkJBQTZCO0FBQzdCLElBQUksTUFBTSxHQUFHLElBQUEsdUJBQVMsRUFBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO0FBUzFEOzs7OztHQUtHO0FBQ0gsTUFBYSxnQkFBZ0I7SUFNekIsWUFBWSxJQUE4QjtRQUYxQyxhQUFRLEdBQTJDLEVBQUUsQ0FBQztRQUN0RCxZQUFPLEdBQW1DLEVBQUUsQ0FBQztRQUV6QyxJQUFJLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUNsQixJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDO1FBRXBELElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUNoQixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLENBQUMscUJBQXFCO1lBQzdELElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLElBQUksSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBTSxnQ0FBZ0M7WUFDL0YsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQztTQUNuQztJQUVMLENBQUM7SUFFRCxNQUFNLENBQUMsTUFBZTtRQUNsQixJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUNqQix1QkFBdUI7WUFDdkIsT0FBTztTQUNWO1FBRUQsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBRWhCLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRTtZQUMxQiwrQ0FBK0M7WUFDL0MsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQzVCLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUNsRSxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7U0FDaEU7UUFFRCxzQkFBc0I7UUFDdEIsSUFBSSxJQUFJLENBQUMsbUJBQW1CLEVBQUU7WUFDMUIsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7U0FDekI7UUFFRCxNQUFNLENBQUMsT0FBTyxDQUFDLHVCQUFPLENBQUMsTUFBTSxDQUFDLHVCQUFPLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQztRQUV2RCxJQUFJLElBQUksQ0FBQyxtQkFBbUIsRUFBRTtZQUMxQixJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxVQUFVLENBQUM7Z0JBQ2xDLE1BQU0sQ0FBQyxJQUFJLENBQUMsOEJBQThCLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUN2RCxNQUFNLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDeEIsQ0FBQyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztTQUNwQjtJQUNMLENBQUM7SUFFRCxLQUFLLENBQUMsRUFBVTtRQUNaLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDNUIsSUFBSSxHQUFHLEVBQUU7WUFDTCxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDbEIsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1NBQzVCO0lBQ0wsQ0FBQztJQUNELFdBQVcsQ0FBQyxFQUFVO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN4QixJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzVCLElBQUksR0FBRyxFQUFFO1lBQ0wsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ2xCLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztTQUM1QjtJQUNMLENBQUM7Q0FDSjtBQS9ERCw0Q0ErREMifQ==
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.handle = void 0;
|
|
4
|
+
const melo_protocol_1 = require("@bigtyphoon/melo-protocol");
|
|
5
|
+
function handle(socket, reason) {
|
|
6
|
+
// websocket close code 1000 would emit when client close the connection
|
|
7
|
+
if (typeof reason === 'string') {
|
|
8
|
+
let res = {
|
|
9
|
+
reason: reason
|
|
10
|
+
};
|
|
11
|
+
socket.sendRaw(melo_protocol_1.Package.encode(melo_protocol_1.Package.TYPE_KICK, Buffer.from(JSON.stringify(res))));
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
exports.handle = handle;
|
|
15
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2ljay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9jb25uZWN0b3JzL2NvbW1hbmRzL2tpY2sudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkRBQW9EO0FBRXBELFNBQWdCLE1BQU0sQ0FBQyxNQUFlLEVBQUUsTUFBYztJQUNsRCx3RUFBd0U7SUFDeEUsSUFBSSxPQUFPLE1BQU0sS0FBSyxRQUFRLEVBQUU7UUFDNUIsSUFBSSxHQUFHLEdBQUc7WUFDTixNQUFNLEVBQUUsTUFBTTtTQUNqQixDQUFDO1FBQ0YsTUFBTSxDQUFDLE9BQU8sQ0FBQyx1QkFBTyxDQUFDLE1BQU0sQ0FBQyx1QkFBTyxDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDdkY7QUFDTCxDQUFDO0FBUkQsd0JBUUMifQ==
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.decode = exports.encode = void 0;
|
|
4
|
+
const melo_protocol_1 = require("@bigtyphoon/melo-protocol");
|
|
5
|
+
const Constants = require("../../util/constants");
|
|
6
|
+
const melo_logger_1 = require("@bigtyphoon/melo-logger");
|
|
7
|
+
const path = require("path");
|
|
8
|
+
let logger = (0, melo_logger_1.getLogger)('melo', path.basename(__filename));
|
|
9
|
+
let encode = function (reqId, route, msg) {
|
|
10
|
+
if (!!reqId) {
|
|
11
|
+
return composeResponse(this, reqId, route, msg);
|
|
12
|
+
}
|
|
13
|
+
else {
|
|
14
|
+
return composePush(this, route, msg);
|
|
15
|
+
}
|
|
16
|
+
};
|
|
17
|
+
exports.encode = encode;
|
|
18
|
+
let decode = function (msg) {
|
|
19
|
+
msg = melo_protocol_1.Message.decode(msg.body);
|
|
20
|
+
let route = msg.route;
|
|
21
|
+
// decode use dictionary
|
|
22
|
+
if (!!msg.compressRoute) {
|
|
23
|
+
if (!!this.connector.useDict) {
|
|
24
|
+
let abbrs = this.dictionary.getAbbrs();
|
|
25
|
+
if (!abbrs[route]) {
|
|
26
|
+
logger.error('dictionary error! no abbrs for route : %s', route);
|
|
27
|
+
return null;
|
|
28
|
+
}
|
|
29
|
+
route = msg.route = abbrs[route];
|
|
30
|
+
}
|
|
31
|
+
else {
|
|
32
|
+
logger.error('fail to uncompress route code for msg: %j, server not enable dictionary.', msg);
|
|
33
|
+
return null;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
// decode use protobuf
|
|
37
|
+
if (!!this.protobuf && !!this.protobuf.getProtos().client[route]) {
|
|
38
|
+
msg.body = this.protobuf.decode(route, msg.body);
|
|
39
|
+
}
|
|
40
|
+
else if (!!this.decodeIO_protobuf && !!this.decodeIO_protobuf.check(Constants.RESERVED.CLIENT, route)) {
|
|
41
|
+
msg.body = this.decodeIO_protobuf.decode(route, msg.body);
|
|
42
|
+
}
|
|
43
|
+
else {
|
|
44
|
+
try {
|
|
45
|
+
msg.body = JSON.parse(msg.body.toString('utf8'));
|
|
46
|
+
}
|
|
47
|
+
catch (ex) {
|
|
48
|
+
msg.body = {};
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
return msg;
|
|
52
|
+
};
|
|
53
|
+
exports.decode = decode;
|
|
54
|
+
let composeResponse = function (server, msgId, route, msgBody) {
|
|
55
|
+
if (!msgId || !route || !msgBody) {
|
|
56
|
+
return null;
|
|
57
|
+
}
|
|
58
|
+
msgBody = encodeBody(server, route, msgBody);
|
|
59
|
+
return melo_protocol_1.Message.encode(msgId, melo_protocol_1.Message.TYPE_RESPONSE, false, null, msgBody);
|
|
60
|
+
};
|
|
61
|
+
let composePush = function (server, route, msgBody) {
|
|
62
|
+
if (!route || !msgBody) {
|
|
63
|
+
return null;
|
|
64
|
+
}
|
|
65
|
+
msgBody = encodeBody(server, route, msgBody);
|
|
66
|
+
// encode use dictionary
|
|
67
|
+
let compressRoute = false;
|
|
68
|
+
if (!!server.dictionary) {
|
|
69
|
+
let dict = server.dictionary.getDict();
|
|
70
|
+
if (!!server.connector.useDict && !!dict[route]) {
|
|
71
|
+
route = dict[route];
|
|
72
|
+
compressRoute = true;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
return melo_protocol_1.Message.encode(0, melo_protocol_1.Message.TYPE_PUSH, compressRoute, route, msgBody);
|
|
76
|
+
};
|
|
77
|
+
let encodeBody = function (server, route, msgBody) {
|
|
78
|
+
// encode use protobuf
|
|
79
|
+
if (!!server.protobuf && !!server.protobuf.getProtos().server[route]) {
|
|
80
|
+
msgBody = server.protobuf.encode(route, msgBody);
|
|
81
|
+
}
|
|
82
|
+
else if (!!server.decodeIO_protobuf && !!server.decodeIO_protobuf.check(Constants.RESERVED.SERVER, route)) {
|
|
83
|
+
msgBody = server.decodeIO_protobuf.encode(route, msgBody);
|
|
84
|
+
}
|
|
85
|
+
else {
|
|
86
|
+
msgBody = Buffer.from(JSON.stringify(msgBody), 'utf8');
|
|
87
|
+
}
|
|
88
|
+
return msgBody;
|
|
89
|
+
};
|
|
90
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29kZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWIvY29ubmVjdG9ycy9jb21tb24vY29kZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkRBQW9EO0FBQ3BELGtEQUFtRDtBQUNuRCx5REFBb0Q7QUFFcEQsNkJBQTZCO0FBQzdCLElBQUksTUFBTSxHQUFHLElBQUEsdUJBQVMsRUFBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO0FBRzFELElBQUksTUFBTSxHQUFHLFVBQThCLEtBQWEsRUFBRSxLQUFhLEVBQUUsR0FBUTtJQUM3RSxJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUU7UUFDVCxPQUFPLGVBQWUsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztLQUNuRDtTQUFNO1FBQ0gsT0FBTyxXQUFXLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztLQUN4QztBQUNMLENBQUMsQ0FBQztBQTRFRSx3QkFBTTtBQTFFVixJQUFJLE1BQU0sR0FBRyxVQUF1QixHQUFRO0lBQ3hDLEdBQUcsR0FBRyx1QkFBTyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDL0IsSUFBSSxLQUFLLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQztJQUV0Qix3QkFBd0I7SUFDeEIsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRTtRQUNyQixJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRTtZQUMxQixJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ3ZDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUU7Z0JBQ2YsTUFBTSxDQUFDLEtBQUssQ0FBQywyQ0FBMkMsRUFBRSxLQUFLLENBQUMs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
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const melo_protocol_1 = require("@bigtyphoon/melo-protocol");
|
|
4
|
+
const melo_logger_1 = require("@bigtyphoon/melo-logger");
|
|
5
|
+
const path = require("path");
|
|
6
|
+
let logger = (0, melo_logger_1.getLogger)('melo', path.basename(__filename));
|
|
7
|
+
let handlers = {};
|
|
8
|
+
let ST_INITED = 0;
|
|
9
|
+
let ST_WAIT_ACK = 1;
|
|
10
|
+
let ST_WORKING = 2;
|
|
11
|
+
let ST_CLOSED = 3;
|
|
12
|
+
let handleHandshake = function (socket, pkg) {
|
|
13
|
+
if (socket.state !== ST_INITED) {
|
|
14
|
+
return;
|
|
15
|
+
}
|
|
16
|
+
try {
|
|
17
|
+
socket.emit('handshake', JSON.parse(melo_protocol_1.Protocol.strdecode(pkg.body)));
|
|
18
|
+
}
|
|
19
|
+
catch (ex) {
|
|
20
|
+
socket.emit('handshake', {});
|
|
21
|
+
}
|
|
22
|
+
};
|
|
23
|
+
let handleHandshakeAck = function (socket, pkg) {
|
|
24
|
+
if (socket.state !== ST_WAIT_ACK) {
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
socket.state = ST_WORKING;
|
|
28
|
+
socket.emit('heartbeat');
|
|
29
|
+
};
|
|
30
|
+
let handleHeartbeat = function (socket, pkg) {
|
|
31
|
+
if (socket.state !== ST_WORKING) {
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
socket.emit('heartbeat');
|
|
35
|
+
};
|
|
36
|
+
let handleData = function (socket, pkg) {
|
|
37
|
+
if (socket.state !== ST_WORKING) {
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
socket.emit('message', pkg);
|
|
41
|
+
};
|
|
42
|
+
handlers[melo_protocol_1.Package.TYPE_HANDSHAKE] = handleHandshake;
|
|
43
|
+
handlers[melo_protocol_1.Package.TYPE_HANDSHAKE_ACK] = handleHandshakeAck;
|
|
44
|
+
handlers[melo_protocol_1.Package.TYPE_HEARTBEAT] = handleHeartbeat;
|
|
45
|
+
handlers[melo_protocol_1.Package.TYPE_DATA] = handleData;
|
|
46
|
+
function default_1(socket, pkg) {
|
|
47
|
+
let handler = handlers[pkg.type];
|
|
48
|
+
if (!!handler) {
|
|
49
|
+
handler(socket, pkg);
|
|
50
|
+
}
|
|
51
|
+
else {
|
|
52
|
+
logger.error('could not find handle invalid data package.');
|
|
53
|
+
socket.disconnect();
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
exports.default = default_1;
|
|
57
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFuZGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9jb25uZWN0b3JzL2NvbW1vbi9oYW5kbGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsNkRBQStEO0FBQy9ELHlEQUFvRDtBQUVwRCw2QkFBNkI7QUFDN0IsSUFBSSxNQUFNLEdBQUcsSUFBQSx1QkFBUyxFQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7QUFHMUQsSUFBSSxRQUFRLEdBQWtFLEVBQUUsQ0FBQztBQUVqRixJQUFJLFNBQVMsR0FBRyxDQUFDLENBQUM7QUFDbEIsSUFBSSxXQUFXLEdBQUcsQ0FBQyxDQUFDO0FBQ3BCLElBQUksVUFBVSxHQUFHLENBQUMsQ0FBQztBQUNuQixJQUFJLFNBQVMsR0FBRyxDQUFDLENBQUM7QUFFbEIsSUFBSSxlQUFlLEdBQUcsVUFBVSxNQUFlLEVBQUcsR0FBUTtJQUN0RCxJQUFJLE1BQU0sQ0FBQyxLQUFLLEtBQUssU0FBUyxFQUFFO1FBQzVCLE9BQU87S0FDVjtJQUNELElBQUk7UUFDQSxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLHdCQUFRLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDdEU7SUFBQyxPQUFPLEVBQUUsRUFBRTtRQUNULE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0tBQ2hDO0FBQ0wsQ0FBQyxDQUFDO0FBRUYsSUFBSSxrQkFBa0IsR0FBRyxVQUFVLE1BQWUsRUFBRyxHQUFRO0lBQ3pELElBQUksTUFBTSxDQUFDLEtBQUssS0FBSyxXQUFXLEVBQUU7UUFDOUIsT0FBTztLQUNWO0lBQ0QsTUFBTSxDQUFDLEtBQUssR0FBRyxVQUFVLENBQUM7SUFDMUIsTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztBQUM3QixDQUFDLENBQUM7QUFFRixJQUFJLGVBQWUsR0FBRyxVQUFVLE1BQWUsRUFBRyxHQUFRO0lBQ3RELElBQUksTUFBTSxDQUFDLEtBQUssS0FBSyxVQUFVLEVBQUU7UUFDN0IsT0FBTztLQUNWO0lBQ0QsTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztBQUM3QixDQUFDLENBQUM7QUFFRixJQUFJLFVBQVUsR0FBRyxVQUFVLE1BQWUsRUFBRyxHQUFRO0lBQ2pELElBQUksTUFBTSxDQUFDLEtBQUssS0FBSyxVQUFVLEVBQUU7UUFDN0IsT0FBTztLQUNWO0lBQ0QsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDaEMsQ0FBQyxDQUFDO0FBRUYsUUFBUSxDQUFDLHVCQUFPLENBQUMsY0FBYyxDQUFDLEdBQUcsZUFBZSxDQUFDO0FBQ25ELFFBQVEsQ0FBQyx1QkFBTyxDQUFDLGtCQUFrQixDQUFDLEdBQUcsa0JBQWtCLENBQUM7QUFDMUQsUUFBUSxDQUFDLHVCQUFPLENBQUMsY0FBYyxDQUFDLEdBQUcsZUFBZSxDQUFDO0FBQ25ELFFBQVEsQ0FBQyx1QkFBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLFVBQVUsQ0FBQztBQUV6QyxtQkFBeUIsTUFBZSxFQUFFLEdBQVE7SUFDOUMsSUFBSSxPQUFPLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNqQyxJQUFJLENBQUMsQ0FBQyxPQUFPLEVBQUU7UUFDWCxPQUFPLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0tBQ3hCO1NBQU07UUFDSCxNQUFNLENBQUMsS0FBSyxDQUFDLDZDQUE2QyxDQUFDLENBQUM7UUFDNUQsTUFBTSxDQUFDLFVBQVUsRUFBRSxDQUFDO0tBQ3ZCO0FBQ0wsQ0FBQztBQVJELDRCQVFDIn0=
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSUh5YnJpZFNvY2tldC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9jb25uZWN0b3JzL2h5YnJpZC9JSHlicmlkU29ja2V0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIifQ==
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.HybridSwitcher = void 0;
|
|
4
|
+
const events_1 = require("events");
|
|
5
|
+
const wsprocessor_1 = require("./wsprocessor");
|
|
6
|
+
const tcpprocessor_1 = require("./tcpprocessor");
|
|
7
|
+
const melo_logger_1 = require("@bigtyphoon/melo-logger");
|
|
8
|
+
const path = require("path");
|
|
9
|
+
let logger = (0, melo_logger_1.getLogger)('melo', path.basename(__filename));
|
|
10
|
+
let HTTP_METHODS = [
|
|
11
|
+
'GET', 'POST', 'DELETE', 'PUT', 'HEAD'
|
|
12
|
+
];
|
|
13
|
+
// max length of 'DELETE'
|
|
14
|
+
let MAX_HTTP_METHODS_LEN = 6;
|
|
15
|
+
let ST_STARTED = 1;
|
|
16
|
+
let ST_CLOSED = 2;
|
|
17
|
+
let DEFAULT_TIMEOUT = 90;
|
|
18
|
+
/**
|
|
19
|
+
* Switcher for tcp and websocket protocol
|
|
20
|
+
*
|
|
21
|
+
* @param {Object} server tcp server instance from node.js net module
|
|
22
|
+
*/
|
|
23
|
+
class HybridSwitcher extends events_1.EventEmitter {
|
|
24
|
+
constructor(server, opts) {
|
|
25
|
+
super();
|
|
26
|
+
this.server = server;
|
|
27
|
+
this.wsprocessor = new wsprocessor_1.WSProcessor();
|
|
28
|
+
this.tcpprocessor = new tcpprocessor_1.TCPProcessor(opts.closeMethod);
|
|
29
|
+
this.id = 1;
|
|
30
|
+
this.timeout = (opts.timeout || DEFAULT_TIMEOUT) * 1000;
|
|
31
|
+
this.setNoDelay = opts.setNoDelay;
|
|
32
|
+
if (!opts.ssl) {
|
|
33
|
+
this.server.on('connection', this.newSocket.bind(this));
|
|
34
|
+
}
|
|
35
|
+
else {
|
|
36
|
+
this.server.on('secureConnection', this.newSocket.bind(this));
|
|
37
|
+
this.server.on('clientError', function (e, tlsSo) {
|
|
38
|
+
logger.warn('an ssl error occured before handshake established: ', e);
|
|
39
|
+
tlsSo.destroy();
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
this.wsprocessor.on('connection', this.emit.bind(this, 'connection'));
|
|
43
|
+
this.tcpprocessor.on('connection', this.emit.bind(this, 'connection'));
|
|
44
|
+
this.state = ST_STARTED;
|
|
45
|
+
}
|
|
46
|
+
newSocket(socket) {
|
|
47
|
+
if (this.state !== ST_STARTED) {
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
socket.on('error', (err) => {
|
|
51
|
+
logger.debug('connection error:%s, the remote ip is %s && port is %s', err.message, socket.remoteAddress, socket.remotePort);
|
|
52
|
+
socket.destroy();
|
|
53
|
+
});
|
|
54
|
+
socket.on('close', () => {
|
|
55
|
+
socket.destroy();
|
|
56
|
+
});
|
|
57
|
+
socket.setTimeout(this.timeout, function () {
|
|
58
|
+
logger.warn('connection is timeout without communication, the remote ip is %s && port is %s', socket.remoteAddress, socket.remotePort);
|
|
59
|
+
socket.destroy();
|
|
60
|
+
});
|
|
61
|
+
let self = this;
|
|
62
|
+
socket.once('data', (data) => {
|
|
63
|
+
// FIXME: handle incomplete HTTP method
|
|
64
|
+
if (isHttp(data)) {
|
|
65
|
+
this.processHttp(self.wsprocessor, socket, data);
|
|
66
|
+
}
|
|
67
|
+
else {
|
|
68
|
+
if (!!self.setNoDelay) {
|
|
69
|
+
socket.setNoDelay(true);
|
|
70
|
+
}
|
|
71
|
+
this.processTcp(self.tcpprocessor, socket, data);
|
|
72
|
+
}
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
close() {
|
|
76
|
+
if (this.state !== ST_STARTED) {
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
this.state = ST_CLOSED;
|
|
80
|
+
this.wsprocessor.close();
|
|
81
|
+
this.tcpprocessor.close();
|
|
82
|
+
}
|
|
83
|
+
processHttp(processor, socket, data) {
|
|
84
|
+
processor.add(socket, data);
|
|
85
|
+
}
|
|
86
|
+
processTcp(processor, socket, data) {
|
|
87
|
+
processor.add(socket, data);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
exports.HybridSwitcher = HybridSwitcher;
|
|
91
|
+
let isHttp = function (data) {
|
|
92
|
+
let head = data.toString('utf8', 0, MAX_HTTP_METHODS_LEN - 1);
|
|
93
|
+
for (let i = 0, l = HTTP_METHODS.length; i < l; i++) {
|
|
94
|
+
if (head.indexOf(HTTP_METHODS[i]) === 0) {
|
|
95
|
+
return true;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
return false;
|
|
99
|
+
};
|
|
100
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3dpdGNoZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWIvY29ubmVjdG9ycy9oeWJyaWQvc3dpdGNoZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsbUNBQXNDO0FBRXRDLCtDQUE0QztBQUM1QyxpREFBOEM7QUFDOUMseURBQW9EO0FBT3BELDZCQUE2QjtBQUM3QixJQUFJLE1BQU0sR0FBRyxJQUFBLHVCQUFTLEVBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztBQUcxRCxJQUFJLFlBQVksR0FBRztJQUNmLEtBQUssRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxNQUFNO0NBQ3pDLENBQUM7QUFDRix5QkFBeUI7QUFDekIsSUFBSSxvQkFBb0IsR0FBRyxDQUFDLENBQUM7QUFFN0IsSUFBSSxVQUFVLEdBQUcsQ0FBQyxDQUFDO0FBQ25CLElBQUksU0FBUyxHQUFHLENBQUMsQ0FBQztBQUVsQixJQUFJLGVBQWUsR0FBRyxFQUFFLENBQUM7QUFjekI7Ozs7R0FJRztBQUNILE1BQWEsY0FBZSxTQUFRLHFCQUFZO0lBVTVDLFlBQVksTUFBa0IsRUFBRSxJQUEyQjtRQUN2RCxLQUFLLEVBQUUsQ0FBQztRQUNSLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSx5QkFBVyxFQUFFLENBQUM7UUFDckMsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLDJCQUFZLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3ZELElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ1osSUFBSSxDQUFDLE9BQU8sR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLElBQUksZUFBZSxDQUFDLEdBQUcsSUFBSSxDQUFDO1FBQ3hELElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FB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
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TCPProcessor = void 0;
|
|
4
|
+
const events_1 = require("events");
|
|
5
|
+
const utils = require("../../util/utils");
|
|
6
|
+
const tcpsocket_1 = require("./tcpsocket");
|
|
7
|
+
let ST_STARTED = 1;
|
|
8
|
+
let ST_CLOSED = 2;
|
|
9
|
+
// private protocol, no need exports
|
|
10
|
+
let HEAD_SIZE = 4;
|
|
11
|
+
/**
|
|
12
|
+
* websocket protocol processor
|
|
13
|
+
*/
|
|
14
|
+
class TCPProcessor extends events_1.EventEmitter {
|
|
15
|
+
constructor(closeMethod) {
|
|
16
|
+
super();
|
|
17
|
+
this.closeMethod = closeMethod;
|
|
18
|
+
this.state = ST_STARTED;
|
|
19
|
+
}
|
|
20
|
+
add(socket, data) {
|
|
21
|
+
if (this.state !== ST_STARTED) {
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
let tcpsocket = new tcpsocket_1.TcpSocket(socket, {
|
|
25
|
+
headSize: HEAD_SIZE,
|
|
26
|
+
headHandler: utils.headHandler,
|
|
27
|
+
closeMethod: this.closeMethod
|
|
28
|
+
});
|
|
29
|
+
this.emit('connection', tcpsocket);
|
|
30
|
+
socket.emit('data', data);
|
|
31
|
+
}
|
|
32
|
+
close() {
|
|
33
|
+
if (this.state !== ST_STARTED) {
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
this.state = ST_CLOSED;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
exports.TCPProcessor = TCPProcessor;
|
|
40
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGNwcHJvY2Vzc29yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vbGliL2Nvbm5lY3RvcnMvaHlicmlkL3RjcHByb2Nlc3Nvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxtQ0FBc0M7QUFHdEMsMENBQTBDO0FBQzFDLDJDQUF3QztBQUV4QyxJQUFJLFVBQVUsR0FBRyxDQUFDLENBQUM7QUFDbkIsSUFBSSxTQUFTLEdBQUcsQ0FBQyxDQUFDO0FBRWxCLG9DQUFvQztBQUNwQyxJQUFJLFNBQVMsR0FBRyxDQUFDLENBQUM7QUFFbEI7O0dBRUc7QUFDSCxNQUFhLFlBQWEsU0FBUSxxQkFBWTtJQUcxQyxZQUFZLFdBQW1CO1FBQzNCLEtBQUssRUFBRSxDQUFDO1FBQ1IsSUFBSSxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUM7UUFDL0IsSUFBSSxDQUFDLEtBQUssR0FBRyxVQUFVLENBQUM7SUFDNUIsQ0FBQztJQUNELEdBQUcsQ0FBQyxNQUFrQixFQUFFLElBQVk7UUFDaEMsSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLFVBQVUsRUFBRTtZQUMzQixPQUFPO1NBQ1Y7UUFDRCxJQUFJLFNBQVMsR0FBRyxJQUFJLHFCQUFTLENBQUMsTUFBTSxFQUFFO1lBQ2xDLFFBQVEsRUFBRSxTQUFTO1lBQ25CLFdBQVcsRUFBRSxLQUFLLENBQUMsV0FBVztZQUM5QixXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVc7U0FDaEMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDbkMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDOUIsQ0FBQztJQUVELEtBQUs7UUFDRCxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssVUFBVSxFQUFFO1lBQzNCLE9BQU87U0FDVjtRQUNELElBQUksQ0FBQyxLQUFLLEdBQUcsU0FBUyxDQUFDO0lBQzNCLENBQUM7Q0FDSjtBQTNCRCxvQ0EyQkMifQ==
|