Skip to main content

消息机制


一收一发

一收一发类似于前后端接口调用,我们完全可以封装一个类似 axiosfetch 的工具方法。

Web 端

electron?.ipcRenderer?.invoke('window-max').then((isWinSizeMax) => {
console.log(isWinSizeMax);
});

Nodejs 端

ipcMain.handle('window-max', function () {
return true;
});

只收不发

比如我们要监听下载进度:

Web 端

//监听下载版本信息
electron?.ipcRenderer?.on('window-download-msg', (event, updateDesc = []) => {
console.log('下载实时信息:', updateDesc);
});

Nodejs 端

//发送消息封装
function onSendMessage(event, messageTitle, params = [], callback = () => void 0) {
try {
if (!event) {
console.log(`消息对象未发现 ${messageTitle}`);
return;
}

if (event?.sender?.isDestroyed()) {
return;
}

//清空消息队列
clearMessageQueue(event);

event?.sender?.send(messageTitle, ...params);

callback?.();
} catch (e) {
console.log(`发送${messageTitle}消息失败`, e.toString());
}
}

// 在下载方法内开始发送
onSendMessage(mainData.win_event, 'window-download-msg', [更新信息]);

只发不收

有时候我们并不关心执行结果,或只是通知而已,那个就可以向消息管道中发送即可 无需监听其他消息。

Web 端

electron?.ipcRenderer.send('window-min');