상세 컨텐츠

본문 제목

electron ipcMain -> ipcRenderer

카테고리 없음

by goldtagworks 2024. 7. 10. 21:39

본문

반응형
    /**
     * 일렉트론에는 메인쪽에서 요청한 결과를 렌더러에서 처리하고 다시 돌려줄 API 가 존재하지 않는다.
     * 예를들어 메인에서 렌더러에 컨펌 메세지를 띄우고 사용자가 확인을 했는지 취소를 했는지 다시 메인에서 응답을 받아볼 방법이 없다.
     * 이러한 처리를 하기위한 헬퍼 함수이다.
     * @param channel .
     * @param callFuncName .
     * @param params .
     * @returns .
     */
    public async invoke(channel: string, callFuncName: string, params: any): Promise<any> {
        // 같은 채널로 여러번에 요청이 있을수 있으므로 각 채널별로 응답받을 키를 만든다.
        const asyncKey = dayjs().format('YYYYMMDDHHmmssSSS');

        // Promise 로 응답받을때까지 대기
        return new Promise((resolve, reject): any => {
            // 응답받는 채널은 중복나지 않도록 `async:${channel}:${asyncKey}` 로 요청한다.
            ipcMain.once(`async:${channel}:${asyncKey}`, async (event: any, result: any): Promise<void> => {
                resolve(result);
            });

            // 렌더러에 요청한다. 이때 asyncKey 를 추가로 전달한다.
            this.webContents.send(channel, { asyncKey, callFuncName, params });
        });
    }
반응형