-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathmodules.js
More file actions
81 lines (64 loc) · 2.22 KB
/
modules.js
File metadata and controls
81 lines (64 loc) · 2.22 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
import { spawn } from 'child_process';
import fs from 'fs';
global.childList = { };
export default class Modules {
static loadSubprocess(i) {
if(typeof config.subprocessesList[i].init === 'function') {
config.subprocessesList[i].init();
}
if(config.subprocessesList[i].options !== undefined) {
config.subprocessesList[i].options = [];
}
if(config.subprocessesList[i].file !== undefined) {
try {
childList[i] = spawn(config.subprocessesList[i].file, config.subprocessesList[i].fileopt);
if(typeof config.subprocessesList[i].onclose === 'function') {
childList[i].on('close', config.subprocessesList[i].onclose);
}
if(typeof config.subprocessesList[i].onerr === 'function') {
childList[i].stderr.on('data', config.subprocessesList[i].onerr);
}
if(typeof config.subprocessesList[i].onstdout === 'function') {
childList[i].stdout.on('data', config.subprocessesList[i].onstdout);
}
} catch(e) {
log('Failed to load/reload subprocess: ' + i + '\n' + e);
}
}
}
static loadSubprocesses() {
for(const subprocessName in config.subprocessesList) {
log('./initialising.SUBPROCESS.' + subprocessName, 'boot');
Modules.loadSubprocess(subprocessName);
}
}
static async reloadModule(moduleName) {
try {
if(global[moduleName] && typeof global[moduleName].stop === 'function') {
await global[moduleName].stop();
}
delete global[moduleName];
global[moduleName] = (await import('./' + moduleName + '.js?date=' + Date.now())).default; // TODO: find a better way, this isn't releasing memory ...
if(global[moduleName] && typeof global[moduleName].init === 'function') {
await global[moduleName].init();
}
} catch(e) {
log('Failed to load/reload module: ' + moduleName + '\n');
console.error(e);
}
Modules.watch(moduleName);
}
static async loadModules() {
for(const moduleName of config.moduleList) {
log('./initialising.MODULES.' + moduleName, 'boot');
await Modules.reloadModule(moduleName);
}
}
static watch(moduleName) {
const watcher = fs.watch(moduleName + '.js', { persistent: false }, (curr, prev) => {
watcher.close();
log('./reloading.MODULES.' + moduleName, 'boot');
Modules.reloadModule(moduleName);
});
}
}