import { IpcRendererEvent } from "electron"; export class IpcRendererListener implements IIpcListener { readonly channel: string; readonly _listenerCallback: IpcListenerCallback; constructor(options: { channel: string; listenerCallback: IpcListenerCallback; }) { this.channel = options.channel; this._listenerCallback = options.listenerCallback; } listen() { this.remove(); window.ipcRenderer.on(this.channel, this._onPost); } remove() { window.ipcRenderer.removeAllListeners(this.channel); } private _onPost = (_e: IpcRendererEvent, payload: InputParam): void => { console.log(`[IPC] Post: ${this.channel}`, payload); this._listenerCallback(payload); } } export default function useIpcRenderer () { const invoke = async (endpoint: string, payload: T) => { try { const res = await window.ipcRenderer.invoke(endpoint, payload? JSON.stringify(payload) : null); return res; } catch (e) { throw e; } } const post = (endpoint: string, payload: T) => { window.ipcRenderer.send(endpoint, payload); }; return { invoke, post, } }