/
QuickMeet
/
Chat.Desktop
Обзор
Документация
Войти
/
QuickMeet
/
Chat.Desktop
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
3.8.13
src/ipc/main.ts
42 строки
1 KB
Guilherme Gazzo
revert version 3.3.x
11 авг 2021, 00:10
11 авг 2021, 00:10
7d0821e
Код
Авторство
О чём код?
import { ipcMain, WebContents } from 'electron'; import { Handler, Channel } from './channels'; export const invoke = <N extends Channel>( webContents: WebContents, channel: N, ...args: Parameters<Handler<N>> ): Promise<ReturnType<Handler<N>>> => new Promise<ReturnType<Handler<N>>>((resolve, reject) => { const id = Math.random().toString(16).slice(2); ipcMain.once(`${channel}@${id}`, (_, { resolved, rejected }) => { if (rejected) { const error = new Error(rejected.message); error.name = rejected.name; error.stack = rejected.stack; reject(error); return; } resolve(resolved); }); webContents.send(channel, id, ...args); }); export const handle = <N extends Channel>( channel: N, handler: ( webContents: WebContents, ...args: Parameters<Handler<N>> ) => Promise<ReturnType<Handler<N>>> ): (() => void) => { ipcMain.handle(channel, (event, ...args: any[]) => handler(event.sender, ...(args as Parameters<Handler<N>>)) ); return () => { ipcMain.removeHandler(channel); }; };