renderer-event.js 2.11 KB
Newer Older
liujiangnan's avatar
liujiangnan committed
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
const { ipcRenderer } = require('electron');
const PackageUtil = require('./package-util');

/** 包名 */
const PACKAGE_NAME = PackageUtil.name;

/**
 * 渲染进程 IPC 事件
 * @author 陈皮皮 (ifaswind)
 * @version 20210818
 */
const RendererEvent = {

    /**
     * 监听事件(一次性)
     * @param {string} channel 频道
     * @param {Function} callback 回调
     */
    once(channel, callback) {
        return ipcRenderer.once(`${PACKAGE_NAME}:${channel}`, callback);
    },

    /**
     * 监听事件
     * @param {string} channel 频道
     * @param {Function} callback 回调
     */
    on(channel, callback) {
        return ipcRenderer.on(`${PACKAGE_NAME}:${channel}`, callback);
    },

    /**
     * 取消事件监听
     * @param {string} channel 频道
     * @param {Function} callback 回调
     */
    removeListener(channel, callback) {
        return ipcRenderer.removeListener(`${PACKAGE_NAME}:${channel}`, callback);
    },

    /**
     * 取消事件的所有监听
     * @param {string} channel 频道
     */
    removeAllListeners(channel) {
        return ipcRenderer.removeAllListeners(`${PACKAGE_NAME}:${channel}`);
    },

    /**
     * 发送事件到主进程
     * @param {string} channel 频道
     * @param {...any} args 参数
     */
    send(channel) {
        // return ipcRenderer.send(`${PACKAGE_NAME}:${channel}`, ...args);
        const args = [`${PACKAGE_NAME}:${channel}`];
        for (let i = 1, l = arguments.length; i < l; i++) {
            args.push(arguments[i]);
        }
        return ipcRenderer.send.apply(ipcRenderer, args);
    },

    /**
     * 发送事件到主进程(同步)
     * @param {string} channel 频道
     * @param {...any} args 参数
     * @returns {Promise<any>}
     */
    sendSync(channel) {
        // return ipcRenderer.sendSync(`${PACKAGE_NAME}:${channel}`, ...args);
        const args = [`${PACKAGE_NAME}:${channel}`];
        for (let i = 1, l = arguments.length; i < l; i++) {
            args.push(arguments[i]);
        }
        return ipcRenderer.sendSync.apply(ipcRenderer, args);
    },

};

module.exports = RendererEvent;