melo-simple-example-game-server 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.
@@ -0,0 +1,27 @@
1
+ {
2
+ // 使用 IntelliSense 了解相关属性。
3
+ // 悬停以查看现有属性的描述。
4
+ // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
5
+ "version": "0.2.0",
6
+ "configurations": [
7
+ {
8
+ "type": "node",
9
+ "request": "launch",
10
+ "name": "LaunchMaster",
11
+ "program": "${workspaceFolder}\\dist\\app.js",
12
+ "outFiles": [
13
+ "${workspaceFolder}/**/*.js"
14
+ ]
15
+ },
16
+ {
17
+ "type": "node",
18
+ "request": "attach",
19
+ "name": "Attach to Connector",
20
+ "address": "127.0.0.1",
21
+ "port": 10001,
22
+ "localRoot": "${workspaceFolder}",
23
+ "remoteRoot": "${workspaceFolder}"
24
+ }
25
+
26
+ ]
27
+ }
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2017 node-melo
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,53 @@
1
+ import { Application, FrontendSession } from '@bigtyphoon/melo';
2
+
3
+ export default function (app: Application) {
4
+ return new Handler(app);
5
+ }
6
+
7
+ export class Handler {
8
+ constructor(private app: Application) {
9
+
10
+ }
11
+
12
+ /**
13
+ * New client entry.
14
+ *
15
+ * @param {Object} msg request message
16
+ * @param {Object} session current session object
17
+ * @return {Void}
18
+ */
19
+ async entry(msg: any, session: FrontendSession) {
20
+ return { code: 200, msg: 'game server is ok.' };
21
+ }
22
+
23
+ /**
24
+ * Publish route for mqtt connector.
25
+ *
26
+ * @param {Object} msg request message
27
+ * @param {Object} session current session object
28
+ * @return {Void}
29
+ */
30
+ async publish(msg: any, session: FrontendSession) {
31
+ let result = {
32
+ topic: 'publish',
33
+ payload: JSON.stringify({ code: 200, msg: 'publish message is ok.' })
34
+ };
35
+ return result;
36
+ }
37
+
38
+ /**
39
+ * Subscribe route for mqtt connector.
40
+ *
41
+ * @param {Object} msg request message
42
+ * @param {Object} session current session object
43
+ * @return {Void}
44
+ */
45
+ async subscribe(msg: any, session: FrontendSession) {
46
+ let result = {
47
+ topic: 'subscribe',
48
+ payload: JSON.stringify({ code: 200, msg: 'subscribe message is ok.' })
49
+ };
50
+ return result;
51
+ }
52
+
53
+ }
@@ -0,0 +1,35 @@
1
+ import {Application, FrontendSession, RemoterClass} from '@bigtyphoon/melo';
2
+
3
+ export default function (app: Application) {
4
+ return new AuthRemoter(app);
5
+ }
6
+
7
+ // UserRpc的命名空间自动合并
8
+ declare global {
9
+ interface UserRpc {
10
+ connector: {
11
+ // 一次性定义一个类自动合并到UserRpc中
12
+ authRemoter: RemoterClass<FrontendSession, AuthRemoter>;
13
+ };
14
+ }
15
+ }
16
+
17
+
18
+ export class AuthRemoter {
19
+ constructor(private app: Application) {
20
+
21
+ }
22
+
23
+ /**
24
+ * 远程rpc方法
25
+ * @param username
26
+ * @param password
27
+ */
28
+ public async auth(username: string, password: string) {
29
+ return true;
30
+ }
31
+
32
+ public async rpcTest(username: string, password: string) {
33
+ return true;
34
+ }
35
+ }
package/app.ts ADDED
@@ -0,0 +1,34 @@
1
+ import { melo } from '@bigtyphoon/melo';
2
+ import { preload } from './preload';
3
+ import { createBasePlugin } from '@bigtyphoon/melo-base-plugin';
4
+
5
+ /**
6
+ * 替换全局Promise
7
+ * 自动解析sourcemap
8
+ * 捕获全局错误
9
+ */
10
+ preload();
11
+
12
+ /**
13
+ * Init app for client.
14
+ */
15
+ let app = melo.createApp();
16
+ app.set('name', 'melo-example');
17
+
18
+ // app configuration
19
+ app.configure('production|development', 'connector', function () {
20
+ app.set('connectorConfig',
21
+ {
22
+ connector: melo.connectors.hybridconnector,
23
+ heartbeat: 3,
24
+ useDict: true,
25
+ useProtobuf: true
26
+ });
27
+ });
28
+
29
+ // 载入测试的组件
30
+ app.use(createBasePlugin());
31
+
32
+ // start app
33
+ app.start();
34
+
@@ -0,0 +1,52 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Handler = void 0;
4
+ function default_1(app) {
5
+ return new Handler(app);
6
+ }
7
+ exports.default = default_1;
8
+ class Handler {
9
+ constructor(app) {
10
+ this.app = app;
11
+ }
12
+ /**
13
+ * New client entry.
14
+ *
15
+ * @param {Object} msg request message
16
+ * @param {Object} session current session object
17
+ * @return {Void}
18
+ */
19
+ async entry(msg, session) {
20
+ return { code: 200, msg: 'game server is ok.' };
21
+ }
22
+ /**
23
+ * Publish route for mqtt connector.
24
+ *
25
+ * @param {Object} msg request message
26
+ * @param {Object} session current session object
27
+ * @return {Void}
28
+ */
29
+ async publish(msg, session) {
30
+ let result = {
31
+ topic: 'publish',
32
+ payload: JSON.stringify({ code: 200, msg: 'publish message is ok.' })
33
+ };
34
+ return result;
35
+ }
36
+ /**
37
+ * Subscribe route for mqtt connector.
38
+ *
39
+ * @param {Object} msg request message
40
+ * @param {Object} session current session object
41
+ * @return {Void}
42
+ */
43
+ async subscribe(msg, session) {
44
+ let result = {
45
+ topic: 'subscribe',
46
+ payload: JSON.stringify({ code: 200, msg: 'subscribe message is ok.' })
47
+ };
48
+ return result;
49
+ }
50
+ }
51
+ exports.Handler = Handler;
52
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50cnlIYW5kbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vYXBwL3NlcnZlcnMvY29ubmVjdG9yL2hhbmRsZXIvZW50cnlIYW5kbGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUVBLG1CQUF5QixHQUFnQjtJQUNyQyxPQUFPLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzVCLENBQUM7QUFGRCw0QkFFQztBQUVELE1BQWEsT0FBTztJQUNoQixZQUFvQixHQUFnQjtRQUFoQixRQUFHLEdBQUgsR0FBRyxDQUFhO0lBRXBDLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQVEsRUFBRSxPQUF3QjtRQUMxQyxPQUFPLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsb0JBQW9CLEVBQUUsQ0FBQztJQUNwRCxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFRLEVBQUUsT0FBd0I7UUFDNUMsSUFBSSxNQUFNLEdBQUc7WUFDVCxLQUFLLEVBQUUsU0FBUztZQUNoQixPQUFPLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLHdCQUF3QixFQUFFLENBQUM7U0FDeEUsQ0FBQztRQUNGLE9BQU8sTUFBTSxDQUFDO0lBQ2xCLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxLQUFLLENBQUMsU0FBUyxDQUFDLEdBQVEsRUFBRSxPQUF3QjtRQUM5QyxJQUFJLE1BQU0sR0FBRztZQUNULEtBQUssRUFBRSxXQUFXO1lBQ2xCLE9BQU8sRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsMEJBQTBCLEVBQUUsQ0FBQztTQUMxRSxDQUFDO1FBQ0YsT0FBTyxNQUFNLENBQUM7SUFDbEIsQ0FBQztDQUVKO0FBOUNELDBCQThDQyJ9
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AuthRemoter = void 0;
4
+ function default_1(app) {
5
+ return new AuthRemoter(app);
6
+ }
7
+ exports.default = default_1;
8
+ class AuthRemoter {
9
+ constructor(app) {
10
+ this.app = app;
11
+ }
12
+ /**
13
+ * 远程rpc方法
14
+ * @param username
15
+ * @param password
16
+ */
17
+ async auth(username, password) {
18
+ return true;
19
+ }
20
+ async rpcTest(username, password) {
21
+ return true;
22
+ }
23
+ }
24
+ exports.AuthRemoter = AuthRemoter;
25
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aFJlbW90ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9hcHAvc2VydmVycy9jb25uZWN0b3IvcmVtb3RlL2F1dGhSZW1vdGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUVBLG1CQUF5QixHQUFnQjtJQUNyQyxPQUFPLElBQUksV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2hDLENBQUM7QUFGRCw0QkFFQztBQWFELE1BQWEsV0FBVztJQUNwQixZQUFvQixHQUFnQjtRQUFoQixRQUFHLEdBQUgsR0FBRyxDQUFhO0lBRXBDLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFnQixFQUFFLFFBQWdCO1FBQ2hELE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFTSxLQUFLLENBQUMsT0FBTyxDQUFDLFFBQWdCLEVBQUUsUUFBZ0I7UUFDbkQsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztDQUNKO0FBakJELGtDQWlCQyJ9
package/dist/app.js ADDED
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const melo_1 = require("@bigtyphoon/melo");
4
+ const preload_1 = require("./preload");
5
+ const melo_base_plugin_1 = require("@bigtyphoon/melo-base-plugin");
6
+ /**
7
+ * 替换全局Promise
8
+ * 自动解析sourcemap
9
+ * 捕获全局错误
10
+ */
11
+ (0, preload_1.preload)();
12
+ /**
13
+ * Init app for client.
14
+ */
15
+ let app = melo_1.melo.createApp();
16
+ app.set('name', 'melo-example');
17
+ // app configuration
18
+ app.configure('production|development', 'connector', function () {
19
+ app.set('connectorConfig', {
20
+ connector: melo_1.melo.connectors.hybridconnector,
21
+ heartbeat: 3,
22
+ useDict: true,
23
+ useProtobuf: true
24
+ });
25
+ });
26
+ // 载入测试的组件
27
+ app.use((0, melo_base_plugin_1.createBasePlugin)());
28
+ // start app
29
+ app.start();
30
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vYXBwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsMkNBQXdDO0FBQ3hDLHVDQUFvQztBQUNwQyxtRUFBZ0U7QUFFaEU7Ozs7R0FJRztBQUNILElBQUEsaUJBQU8sR0FBRSxDQUFDO0FBRVY7O0dBRUc7QUFDSCxJQUFJLEdBQUcsR0FBRyxXQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7QUFDM0IsR0FBRyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsY0FBYyxDQUFDLENBQUM7QUFFaEMsb0JBQW9CO0FBQ3BCLEdBQUcsQ0FBQyxTQUFTLENBQUMsd0JBQXdCLEVBQUUsV0FBVyxFQUFFO0lBQ2pELEdBQUcsQ0FBQyxHQUFHLENBQUMsaUJBQWlCLEVBQ3JCO1FBQ0ksU0FBUyxFQUFFLFdBQUksQ0FBQyxVQUFVLENBQUMsZUFBZTtRQUMxQyxTQUFTLEVBQUUsQ0FBQztRQUNaLE9BQU8sRUFBRSxJQUFJO1FBQ2IsV0FBVyxFQUFFLElBQUk7S0FDcEIsQ0FBQyxDQUFDO0FBQ1gsQ0FBQyxDQUFDLENBQUM7QUFFSCxVQUFVO0FBQ1YsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFBLG1DQUFnQixHQUFFLENBQUMsQ0FBQztBQUU1QixZQUFZO0FBQ1osR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDIn0=
@@ -0,0 +1,5 @@
1
+ [{
2
+ "type": "connector",
3
+ "token": "agarxhqb98rpajloaxn34ga8xrunpagkjwlaw3ruxnpaagl29w4rxn"
4
+ }
5
+ ]
@@ -0,0 +1,22 @@
1
+ [
2
+ {
3
+ "id": "user-1",
4
+ "username": "admin",
5
+ "password": "admin",
6
+ "level": 1
7
+ },
8
+
9
+ {
10
+ "id": "user-2",
11
+ "username": "monitor",
12
+ "password": "monitor",
13
+ "level": 2
14
+ },
15
+
16
+ {
17
+ "id": "user-3",
18
+ "username": "test",
19
+ "password": "test",
20
+ "level": 2
21
+ }
22
+ ]
@@ -0,0 +1 @@
1
+ {}
@@ -0,0 +1 @@
1
+ []
@@ -0,0 +1,150 @@
1
+ {
2
+ "appenders": {
3
+ "console": {
4
+ "type": "console"
5
+ },
6
+ "con-log": {
7
+ "type": "file",
8
+ "filename": "${opts:base}/logs/con-log-${opts:serverId}.log",
9
+ "pattern": "connector",
10
+ "maxLogSize": 1048576,
11
+ "layout": {
12
+ "type": "basic"
13
+ },
14
+ "backups": 5
15
+ },
16
+ "rpc-log": {
17
+ "type": "file",
18
+ "filename": "${opts:base}/logs/rpc-log-${opts:serverId}.log",
19
+ "maxLogSize": 1048576,
20
+ "layout": {
21
+ "type": "basic"
22
+ },
23
+ "backups": 5
24
+ },
25
+ "forward-log": {
26
+ "type": "file",
27
+ "filename": "${opts:base}/logs/forward-log-${opts:serverId}.log",
28
+ "maxLogSize": 1048576,
29
+ "layout": {
30
+ "type": "basic"
31
+ },
32
+ "backups": 5
33
+ },
34
+ "rpc-debug": {
35
+ "type": "file",
36
+ "filename": "${opts:base}/logs/rpc-debug-${opts:serverId}.log",
37
+ "maxLogSize": 1048576,
38
+ "layout": {
39
+ "type": "basic"
40
+ },
41
+ "backups": 5
42
+ },
43
+ "crash-log": {
44
+ "type": "file",
45
+ "filename": "${opts:base}/logs/crash.log",
46
+ "maxLogSize": 1048576,
47
+ "layout": {
48
+ "type": "basic"
49
+ },
50
+ "backups": 5
51
+ },
52
+ "admin-log": {
53
+ "type": "file",
54
+ "filename": "${opts:base}/logs/admin.log",
55
+ "maxLogSize": 1048576,
56
+ "layout": {
57
+ "type": "basic"
58
+ },
59
+ "backups": 5
60
+ },
61
+ "pinus": {
62
+ "type": "file",
63
+ "filename": "${opts:base}/logs/pinus-${opts:serverId}.log",
64
+ "maxLogSize": 1048576,
65
+ "layout": {
66
+ "type": "basic"
67
+ },
68
+ "backups": 5
69
+ },
70
+ "pinus-admin": {
71
+ "type": "file",
72
+ "filename": "${opts:base}/logs/pinus-admin.log",
73
+ "maxLogSize": 1048576,
74
+ "layout": {
75
+ "type": "basic"
76
+ },
77
+ "backups": 5
78
+ },
79
+ "pinus-rpc": {
80
+ "type": "file",
81
+ "filename": "${opts:base}/logs/pinus-rpc-${opts:serverId}.log",
82
+ "maxLogSize": 1048576,
83
+ "layout": {
84
+ "type": "basic"
85
+ },
86
+ "backups": 5
87
+ }
88
+ },
89
+ "categories": {
90
+ "default": {
91
+ "appenders": [
92
+ "console",
93
+ "pinus"
94
+ ],
95
+ "level": "debug"
96
+ },
97
+ "con-log": {
98
+ "appenders": [
99
+ "con-log"
100
+ ],
101
+ "level": "debug"
102
+ },
103
+ "rpc-log": {
104
+ "appenders": [
105
+ "rpc-log"
106
+ ],
107
+ "level": "debug"
108
+ },
109
+ "forward-log": {
110
+ "appenders": [
111
+ "forward-log"
112
+ ],
113
+ "level": "debug"
114
+ },
115
+ "rpc-debug": {
116
+ "appenders": [
117
+ "rpc-debug"
118
+ ],
119
+ "level": "debug"
120
+ },
121
+ "crash-log": {
122
+ "appenders": [
123
+ "crash-log"
124
+ ],
125
+ "level": "debug"
126
+ },
127
+ "admin-log": {
128
+ "appenders": [
129
+ "admin-log"
130
+ ],
131
+ "level": "debug"
132
+ },
133
+ "pinus-admin": {
134
+ "appenders": [
135
+ "pinus-admin"
136
+ ],
137
+ "level": "debug"
138
+ },
139
+ "pinus-rpc": {
140
+ "appenders": [
141
+ "pinus-rpc"
142
+ ],
143
+ "level": "debug"
144
+ }
145
+ },
146
+ "prefix": "${opts:serverId} ",
147
+ "replaceConsole": true,
148
+ "lineDebug": false,
149
+ "errorStack": true
150
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "development": {
3
+ "id": "master-server-1", "host": "127.0.0.1", "port": 3005
4
+ },
5
+ "production": {
6
+ "id": "master-server-1", "host": "127.0.0.1", "port": 3005
7
+ }
8
+ }
@@ -0,0 +1 @@
1
+ {}
@@ -0,0 +1,12 @@
1
+ {
2
+ "development":{
3
+ "connector": [
4
+ {"id": "connector-server-1", "host": "127.0.0.1", "port": 3150, "clientHost": "127.0.0.1", "clientPort": 3010, "frontend": true , "args" : " --inspect=10001"}
5
+ ]
6
+ },
7
+ "production":{
8
+ "connector": [
9
+ {"id": "connector-server-1", "host": "127.0.0.1", "port": 3150, "clientHost": "127.0.0.1", "clientPort": 3010, "frontend": true , "args" : " --inspect=10002"}
10
+ ]
11
+ }
12
+ }
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.preload = void 0;
4
+ const bluebird_1 = require("bluebird");
5
+ // 支持注解
6
+ require("reflect-metadata");
7
+ const melo_1 = require("@bigtyphoon/melo");
8
+ /**
9
+ * 替换全局Promise
10
+ * 自动解析sourcemap
11
+ * 捕获全局错误
12
+ */
13
+ function preload() {
14
+ // 使用bluebird输出完整的promise调用链
15
+ global.Promise = bluebird_1.Promise;
16
+ // 开启长堆栈
17
+ bluebird_1.Promise.config({
18
+ // Enable warnings
19
+ warnings: true,
20
+ // Enable long stack traces
21
+ longStackTraces: true,
22
+ // Enable cancellation
23
+ cancellation: true,
24
+ // Enable monitoring
25
+ monitoring: true
26
+ });
27
+ // 自动解析ts的sourcemap
28
+ require('source-map-support').install({
29
+ handleUncaughtExceptions: false
30
+ });
31
+ // 捕获普通异常
32
+ process.on('uncaughtException', function (err) {
33
+ console.error(melo_1.melo.app ? melo_1.melo.app.getServerId() : "unknownServerId", 'uncaughtException Caught exception: ', err);
34
+ });
35
+ // 捕获async异常
36
+ process.on('unhandledRejection', (reason, p) => {
37
+ console.error(melo_1.melo.app ? melo_1.melo.app.getServerId() : "unknownServerId", 'Caught Unhandled Rejection at:', p, 'reason:', reason);
38
+ });
39
+ }
40
+ exports.preload = preload;
41
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJlbG9hZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3ByZWxvYWQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsdUNBQWlDO0FBQ2pDLE9BQU87QUFDUCw0QkFBMEI7QUFDMUIsMkNBQXdDO0FBRXhDOzs7O0dBSUc7QUFDSCxTQUFnQixPQUFPO0lBQ25CLDRCQUE0QjtJQUMxQixNQUFjLENBQUMsT0FBZSxHQUFJLGtCQUFlLENBQUM7SUFDcEQsUUFBUTtJQUNSLGtCQUFPLENBQUMsTUFBTSxDQUFDO1FBQ1gsa0JBQWtCO1FBQ2xCLFFBQVEsRUFBRSxJQUFJO1FBQ2QsMkJBQTJCO1FBQzNCLGVBQWUsRUFBRSxJQUFJO1FBQ3JCLHNCQUFzQjtRQUN0QixZQUFZLEVBQUUsSUFBSTtRQUNsQixvQkFBb0I7UUFDcEIsVUFBVSxFQUFFLElBQUk7S0FDbkIsQ0FBQyxDQUFDO0lBRUgsbUJBQW1CO0lBQ25CLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLE9BQU8sQ0FBQztRQUNsQyx3QkFBd0IsRUFBRSxLQUFLO0tBQ2xDLENBQUMsQ0FBQztJQUVILFNBQVM7SUFDVCxPQUFPLENBQUMsRUFBRSxDQUFDLG1CQUFtQixFQUFFLFVBQVUsR0FBRztRQUN6QyxPQUFPLENBQUMsS0FBSyxDQUFDLFdBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLFdBQUksQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixFQUFFLHNDQUFzQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ3RILENBQUMsQ0FBQyxDQUFDO0lBRUgsWUFBWTtJQUNaLE9BQU8sQ0FBQyxFQUFFLENBQUMsb0JBQW9CLEVBQUUsQ0FBQyxNQUFXLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDaEQsT0FBTyxDQUFDLEtBQUssQ0FBQyxXQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxXQUFJLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQyxpQkFBaUIsRUFBRSxnQ0FBZ0MsRUFBRSxDQUFDLEVBQUUsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ2pJLENBQUMsQ0FBQyxDQUFDO0FBQ1AsQ0FBQztBQTdCRCwwQkE2QkMifQ==
package/package.json ADDED
@@ -0,0 +1,31 @@
1
+ {
2
+ "name": "melo-simple-example-game-server",
3
+ "version": "1.7.6",
4
+ "private": false,
5
+ "main": "./dist/app",
6
+ "scripts": {
7
+ "build": "tsc",
8
+ "start": "yarn run build && cd dist && node app",
9
+ "test": "yarn run build",
10
+ "cov": "nyc mocha",
11
+ "ci": "yarn run test",
12
+ "gen-api-ref": "node ../../../node_modules/typedoc/bin/typedoc --mode file --hideGenerator --excludeExternals --ignoreCompilerErrors --out ../../../run/site/public/api-reference/melo-loader lib/"
13
+ },
14
+ "engines": {
15
+ "node": ">=12.9.0"
16
+ },
17
+ "dependencies": {
18
+ "@bigtyphoon/melo": "^1.7.6",
19
+ "@bigtyphoon/melo-base-plugin": "^1.7.6",
20
+ "@types/bluebird": "^3.5.19",
21
+ "@types/node": "^16.3.3",
22
+ "bluebird": "^3.5.1",
23
+ "reflect-metadata": "^0.2.2",
24
+ "source-map-support": "^0.5.0"
25
+ },
26
+ "devDependencies": {
27
+ "tslint": "^6.1.3",
28
+ "typescript": "^4.3.5"
29
+ },
30
+ "gitHead": "7dfd3ca78ed6b051e34da595269efb623cd58d1b"
31
+ }
package/preload.ts ADDED
@@ -0,0 +1,40 @@
1
+ import {Promise} from 'bluebird';
2
+ // 支持注解
3
+ import 'reflect-metadata';
4
+ import { melo } from '@bigtyphoon/melo';
5
+
6
+ /**
7
+ * 替换全局Promise
8
+ * 自动解析sourcemap
9
+ * 捕获全局错误
10
+ */
11
+ export function preload() {
12
+ // 使用bluebird输出完整的promise调用链
13
+ ((global as any).Promise as any) = (Promise as any);
14
+ // 开启长堆栈
15
+ Promise.config({
16
+ // Enable warnings
17
+ warnings: true,
18
+ // Enable long stack traces
19
+ longStackTraces: true,
20
+ // Enable cancellation
21
+ cancellation: true,
22
+ // Enable monitoring
23
+ monitoring: true
24
+ });
25
+
26
+ // 自动解析ts的sourcemap
27
+ require('source-map-support').install({
28
+ handleUncaughtExceptions: false
29
+ });
30
+
31
+ // 捕获普通异常
32
+ process.on('uncaughtException', function (err) {
33
+ console.error(melo.app ? melo.app.getServerId() : "unknownServerId", 'uncaughtException Caught exception: ', err);
34
+ });
35
+
36
+ // 捕获async异常
37
+ process.on('unhandledRejection', (reason: any, p) => {
38
+ console.error(melo.app ? melo.app.getServerId() : "unknownServerId", 'Caught Unhandled Rejection at:', p, 'reason:', reason);
39
+ });
40
+ }
package/tsconfig.json ADDED
@@ -0,0 +1,34 @@
1
+ {
2
+ "compilerOptions": {
3
+ "skipLibCheck": true,
4
+ // types option has been previously configured
5
+ "types": [
6
+ // add node as an option
7
+ "node"
8
+ ],
9
+ "module": "commonjs", //指定生成哪个模块系统代码
10
+ "target": "es2017",
11
+ "lib": [
12
+ "es2015",
13
+ "es2016",
14
+ "esnext.asynciterable",
15
+ "DOM"
16
+ ],
17
+ "noImplicitAny": false, //在表达式和声明上有隐含的'any'类型时报错。
18
+ "noImplicitThis": false,
19
+ "inlineSourceMap": true,
20
+ "newLine": "lf", // 统一跨平台下编译文件的换行符
21
+
22
+ "rootDirs": ["."], //仅用来控制输出的目录结构--outDir。
23
+ "outDir": "./dist", //重定向输出目录。
24
+ "experimentalDecorators": true,
25
+ "emitDecoratorMetadata": true,
26
+ "moduleResolution": "node"
27
+ },
28
+ "include": [
29
+ "./**/*.ts"
30
+ ],
31
+ "exclude": [
32
+ "./dist/**/*.*"
33
+ ]
34
+ }