54 lines
1.2 KiB
TypeScript
54 lines
1.2 KiB
TypeScript
|
|
import { IpcRendererEvent } from "electron";
|
|
|
|
export class IpcRendererListener<InputParam> implements IIpcListener<InputParam> {
|
|
|
|
readonly channel: string;
|
|
|
|
readonly _listenerCallback: IpcListenerCallback<InputParam>;
|
|
|
|
constructor(options: {
|
|
channel: string;
|
|
listenerCallback: IpcListenerCallback<InputParam>;
|
|
}) {
|
|
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 <T>(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 = <T>(endpoint: string, payload: T) => {
|
|
window.ipcRenderer.send(endpoint, payload);
|
|
};
|
|
|
|
return {
|
|
invoke,
|
|
post,
|
|
}
|
|
}
|