mm_os 4.1.1 → 4.1.2
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/package.json +4 -2
- package/software.js +191 -0
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "mm_os",
|
|
3
3
|
"description": "MM_OS服务端架构,用于快速构建应用程序,支持网站建设、小程序后台、AI应用、物联网(IOT/AIOT)、游戏服务端等多种场景。",
|
|
4
|
-
"version": "4.1.
|
|
4
|
+
"version": "4.1.2",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"keywords": [
|
|
7
7
|
"AI",
|
|
@@ -77,6 +77,8 @@
|
|
|
77
77
|
"com/",
|
|
78
78
|
"common/",
|
|
79
79
|
"core/",
|
|
80
|
-
"ulits/"
|
|
80
|
+
"ulits/",
|
|
81
|
+
"tcp.js",
|
|
82
|
+
"software.js"
|
|
81
83
|
]
|
|
82
84
|
}
|
package/software.js
ADDED
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
|
|
2
|
+
const {
|
|
3
|
+
Manager
|
|
4
|
+
} = require('mm_machine');
|
|
5
|
+
const {
|
|
6
|
+
App
|
|
7
|
+
} = require('./core/app/index.js');
|
|
8
|
+
const {
|
|
9
|
+
Game
|
|
10
|
+
} = require('./core/game/index.js');
|
|
11
|
+
const {
|
|
12
|
+
Mod
|
|
13
|
+
} = require('./core/mod/index.js');
|
|
14
|
+
|
|
15
|
+
class Software {
|
|
16
|
+
constructor(config, parent) {
|
|
17
|
+
this.getParent = function () {
|
|
18
|
+
return parent;
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* 获取适配器
|
|
25
|
+
*/
|
|
26
|
+
Software.prototype.getAdapter = function () {
|
|
27
|
+
return this.getParent().adapter;
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* 获取管理器
|
|
32
|
+
*/
|
|
33
|
+
Software.prototype.getManager = function () {
|
|
34
|
+
return this.getParent().manager;
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* 加载
|
|
39
|
+
*/
|
|
40
|
+
Software.prototype.load = async function () {
|
|
41
|
+
// 初始化管理器
|
|
42
|
+
await this._initManager();
|
|
43
|
+
// 加载资源
|
|
44
|
+
await this._loadSources();
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* 加载资源
|
|
49
|
+
*/
|
|
50
|
+
Software.prototype._loadSources = async function () {
|
|
51
|
+
let manager = this.getManager();
|
|
52
|
+
// 加载无需依赖关系,所以可以同时加载,内部并行执行
|
|
53
|
+
await Promise.all([
|
|
54
|
+
manager.game.runAll('load'),
|
|
55
|
+
manager.app.runAll('load'),
|
|
56
|
+
manager.mod.runAll('load')
|
|
57
|
+
]);
|
|
58
|
+
};
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* 初始化
|
|
62
|
+
*/
|
|
63
|
+
Software.prototype.init = async function () {
|
|
64
|
+
await this._initSources();
|
|
65
|
+
};
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* 初始化资源
|
|
69
|
+
*/
|
|
70
|
+
Software.prototype._initSources = async function () {
|
|
71
|
+
let server = this.getParent();
|
|
72
|
+
let manager = server.manager;
|
|
73
|
+
await Promise.all([
|
|
74
|
+
manager.game.runAll('init', server, server.eventer, server.logger),
|
|
75
|
+
manager.app.runAll('init', server, server.eventer, server.logger)
|
|
76
|
+
]);
|
|
77
|
+
await manager.mod.runAll('init', server, server.eventer, server.logger)
|
|
78
|
+
};
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* 初始化管理器
|
|
82
|
+
*/
|
|
83
|
+
Software.prototype._initManager = async function () {
|
|
84
|
+
// console.time('[TIMING] _initManager');
|
|
85
|
+
// 管理器配置列表
|
|
86
|
+
var infos = [
|
|
87
|
+
{ name: 'game', title: '游戏', Module: Game },
|
|
88
|
+
{ name: 'app', title: '应用', Module: App },
|
|
89
|
+
{ name: 'mod', title: '模组', Module: Mod }
|
|
90
|
+
];
|
|
91
|
+
|
|
92
|
+
// 管理器实例集合
|
|
93
|
+
var managers = [];
|
|
94
|
+
|
|
95
|
+
// 使用for循环初始化所有管理器
|
|
96
|
+
for (var i = 0; i < infos.length; i++) {
|
|
97
|
+
var config = infos[i];
|
|
98
|
+
var manager = this._createManager(config.name, config.title, config.Module);
|
|
99
|
+
managers.push(manager);
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
// 并行执行所有管理器的初始化操作
|
|
103
|
+
var list = [];
|
|
104
|
+
for (var j = 0; j < managers.length; j++) {
|
|
105
|
+
list.push(managers[j].do('init'));
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
await Promise.all(list);
|
|
109
|
+
// console.timeEnd('[TIMING] _initManager');
|
|
110
|
+
};
|
|
111
|
+
|
|
112
|
+
/**
|
|
113
|
+
* 创建管理器实例
|
|
114
|
+
* @param {string} name 管理器名称
|
|
115
|
+
* @param {string} title 管理器标题
|
|
116
|
+
* @param {Function} cls 管理器类
|
|
117
|
+
* @returns {object} 管理器实例
|
|
118
|
+
*/
|
|
119
|
+
Software.prototype._createManager = function (name, title, cls) {
|
|
120
|
+
let server = this.getParent();
|
|
121
|
+
var manager = new Manager(
|
|
122
|
+
{
|
|
123
|
+
name: name,
|
|
124
|
+
title: title,
|
|
125
|
+
filename: name + '.json',
|
|
126
|
+
tpl_dir: `./core/${name}/`.fullname(__dirname),
|
|
127
|
+
base_dir: '',
|
|
128
|
+
dir: `./${name}`.fullname()
|
|
129
|
+
},
|
|
130
|
+
server,
|
|
131
|
+
server[name],
|
|
132
|
+
cls
|
|
133
|
+
);
|
|
134
|
+
// 设置到对应的管理器属性
|
|
135
|
+
server.manager[name] = manager;
|
|
136
|
+
return manager;
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
/**
|
|
140
|
+
* 启动
|
|
141
|
+
*/
|
|
142
|
+
Software.prototype.start = async function () {
|
|
143
|
+
|
|
144
|
+
};
|
|
145
|
+
|
|
146
|
+
/**
|
|
147
|
+
* 启动资源
|
|
148
|
+
*/
|
|
149
|
+
Software.prototype._startSources = async function () {
|
|
150
|
+
let manager = this.getManager();
|
|
151
|
+
// 启动无顺序,但需要等待所有启动完成,内部依次执行
|
|
152
|
+
await Promise.all([
|
|
153
|
+
manager.game.runAll('start'),
|
|
154
|
+
manager.app.runAll('start'),
|
|
155
|
+
manager.mod.runAll('start')
|
|
156
|
+
]);
|
|
157
|
+
};
|
|
158
|
+
|
|
159
|
+
/**
|
|
160
|
+
* 停止
|
|
161
|
+
*/
|
|
162
|
+
Software.prototype.stop = async function () {
|
|
163
|
+
// 停止资源
|
|
164
|
+
await this._stopSources();
|
|
165
|
+
};
|
|
166
|
+
|
|
167
|
+
/**
|
|
168
|
+
* 停止资源
|
|
169
|
+
*/
|
|
170
|
+
Software.prototype._stopSources = async function () {
|
|
171
|
+
let manager = this.getManager();
|
|
172
|
+
await Promise.all([
|
|
173
|
+
manager.game.runAll('stop'),
|
|
174
|
+
manager.app.runAll('stop'),
|
|
175
|
+
manager.mod.runAll('stop')
|
|
176
|
+
]);
|
|
177
|
+
};
|
|
178
|
+
|
|
179
|
+
/**
|
|
180
|
+
* 运行
|
|
181
|
+
*/
|
|
182
|
+
Software.prototype.run = async function () {
|
|
183
|
+
await this.load();
|
|
184
|
+
await this.init();
|
|
185
|
+
await this.start();
|
|
186
|
+
return this;
|
|
187
|
+
};
|
|
188
|
+
|
|
189
|
+
module.exports = {
|
|
190
|
+
Software
|
|
191
|
+
};
|