From dc63b2ed1b595cf69c158a1544e7791ade74e315 Mon Sep 17 00:00:00 2001 From: toyobayashi Date: Wed, 6 Mar 2024 13:02:27 +0800 Subject: [PATCH] fix: port onmessage --- app/src/ts/renderer-back.ts | 10 +++++++--- app/src/ts/renderer/ipc-back.ts | 11 ++++++----- 2 files changed, 13 insertions(+), 8 deletions(-) diff --git a/app/src/ts/renderer-back.ts b/app/src/ts/renderer-back.ts index 2dc434c..6b0b1fc 100644 --- a/app/src/ts/renderer-back.ts +++ b/app/src/ts/renderer-back.ts @@ -1,5 +1,4 @@ import './renderer/preload' -import { ipcRenderer } from 'electron' import DB from './common/db' import { batchDownload, batchStop, getBatchErrorList, setDownloaderProxy } from './renderer/back/batch-download' // import mainWindowId from './renderer/back/main-window-id' @@ -8,11 +7,16 @@ import readMaster from './renderer/back/on-master-read' let manifest: DB | null = null let master: DB | null = null -ipcRenderer.on('port', e => { +window.node.electron.ipcRenderer.on('port', e => { const mainWindowPort = e.ports[0] + const portEvent = new window.node.events.EventEmitter() + + mainWindowPort.onmessage = function (event) { + portEvent.emit('message', event) + } function defineRemoteFunction (name: string, fn: (...args: any[]) => any): void { - mainWindowPort.addEventListener('message', (event) => { + portEvent.on('message', (event) => { if (event.data.type === name) { Promise.resolve(fn(...event.data.payload)).then(ret => { mainWindowPort.postMessage({ diff --git a/app/src/ts/renderer/ipc-back.ts b/app/src/ts/renderer/ipc-back.ts index aee4f6f..144211e 100644 --- a/app/src/ts/renderer/ipc-back.ts +++ b/app/src/ts/renderer/ipc-back.ts @@ -12,15 +12,17 @@ function createChannelName (): string { } let backWindowPort: MessagePort +const backWindowPortEvent = new window.node.events.EventEmitter() ipcRenderer.on('port', e => { backWindowPort = e.ports[0] - backWindowPort.addEventListener('message', (ev) => { + backWindowPort.onmessage = function (ev) { if (ev.data.type === 'setBatchStatus') { store.commit(Action.SET_BATCH_STATUS, ev.data.payload[0]) } - }) + backWindowPortEvent.emit('message', ev) + } }) function invokeBackWindow (name: string, args: any[] = []): Promise { @@ -31,8 +33,7 @@ function invokeBackWindow (name: string, args: any[] = []): Promise { return } const callbackChannel = createChannelName() - backWindowPort.addEventListener('message', (ev) => { - console.log('recieve: ', ev.data) + backWindowPortEvent.once('message', (ev) => { if (ev.data.id === callbackChannel) { if (ev.data.err) { reject(new Error(ev.data.err)) @@ -40,7 +41,7 @@ function invokeBackWindow (name: string, args: any[] = []): Promise { resolve(ev.data.data) } } - }, { once: true }) + }) backWindowPort.postMessage({ id: callbackChannel, type: name,