@truenewx/tnxet
Version:
互联网技术解决方案:Electron扩展支持
44 lines (42 loc) • 1.91 kB
JavaScript
/**
* 桥接通信主进程端初始化注册
*/
import {ipcMain, app} from 'electron';
import util from './main-util.js';
export default {
eventNames: new Set(),
register() {
let dir = util.file.getAbsolutePathBasedOnRelative('./ipc-listener');
util.file.loopDir(dir, '.*\.js', filePath => {
import('file://' + filePath).then(module => {
let listener = module.default;
let eventName = listener.name;
if (eventName && typeof listener.listen === 'function') {
if (this.eventNames.has(eventName.request)) {
console.error(`Duplicated main ipc listener: ${filePath} for '${eventName.request}'`);
app.exit(1);
return;
}
ipcMain.on(eventName.request, (event, requestId, ...args) => {
if (listener.promise === false) {
listener.listen(...args, (...result) => {
event.reply(eventName.response, requestId, null, ...result);
}, (...error) => {
event.reply(eventName.response, requestId, ...error);
});
} else {
listener.listen(...args).then(result => {
event.reply(eventName.response, requestId, null, result);
}).catch(error => {
event.reply(eventName.response, requestId, error);
});
}
});
this.eventNames.add(eventName.request);
} else {
console.error(`Invalid main ipc listener: ${filePath}`);
}
});
});
},
}