diff --git a/packages/core/src/common/utils/channel/enlist-message-channel-listener-injection-token.ts b/packages/core/src/common/utils/channel/enlist-message-channel-listener-injection-token.ts index bd9f6ca010..b7fff879a8 100644 --- a/packages/core/src/common/utils/channel/enlist-message-channel-listener-injection-token.ts +++ b/packages/core/src/common/utils/channel/enlist-message-channel-listener-injection-token.ts @@ -11,3 +11,22 @@ export type EnlistMessageChannelListener = (listener: MessageChannelListener< export const enlistMessageChannelListenerInjectionToken = getInjectionToken({ id: "enlist-message-channel-listener", }); + +export interface MessageChannelEmitter { + on(channel: string, listener: (event: Event, ...args: any[]) => void): void; + off(channel: string, listener: (event: Event, ...args: any[]) => void): void; +} + +export const enlistMessageChannelListenerFor = (emitter: MessageChannelEmitter) => ( + ({ channel, handler }: MessageChannelListener>) => { + const nativeOnCallback = (_: Event, message: T) => { + handler(message); + }; + + emitter.on(channel.id, nativeOnCallback); + + return () => { + emitter.off(channel.id, nativeOnCallback); + }; + } +); diff --git a/packages/core/src/main/utils/channel/channel-listeners/enlist-message-channel-listener.injectable.ts b/packages/core/src/main/utils/channel/channel-listeners/enlist-message-channel-listener.injectable.ts index db6435ea56..704ba588a1 100644 --- a/packages/core/src/main/utils/channel/channel-listeners/enlist-message-channel-listener.injectable.ts +++ b/packages/core/src/main/utils/channel/channel-listeners/enlist-message-channel-listener.injectable.ts @@ -3,29 +3,12 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ import { getInjectable } from "@ogre-tools/injectable"; -import type { IpcMainEvent } from "electron"; -import { enlistMessageChannelListenerInjectionToken } from "../../../../common/utils/channel/enlist-message-channel-listener-injection-token"; +import { enlistMessageChannelListenerFor, enlistMessageChannelListenerInjectionToken } from "../../../../common/utils/channel/enlist-message-channel-listener-injection-token"; import ipcMainInjectionToken from "../../../../common/ipc/ipc-main-injection-token"; const enlistMessageChannelListenerInjectable = getInjectable({ id: "enlist-message-channel-listener-for-main", - - instantiate: (di) => { - const ipcMain = di.inject(ipcMainInjectionToken); - - return ({ channel, handler }) => { - const nativeOnCallback = (_: IpcMainEvent, message: unknown) => { - handler(message); - }; - - ipcMain.on(channel.id, nativeOnCallback); - - return () => { - ipcMain.off(channel.id, nativeOnCallback); - }; - }; - }, - + instantiate: (di) => enlistMessageChannelListenerFor(di.inject(ipcMainInjectionToken)), injectionToken: enlistMessageChannelListenerInjectionToken, }); diff --git a/packages/core/src/renderer/utils/channel/channel-listeners/enlist-message-channel-listener.injectable.ts b/packages/core/src/renderer/utils/channel/channel-listeners/enlist-message-channel-listener.injectable.ts index 1e5b14bb40..b4141fa5ab 100644 --- a/packages/core/src/renderer/utils/channel/channel-listeners/enlist-message-channel-listener.injectable.ts +++ b/packages/core/src/renderer/utils/channel/channel-listeners/enlist-message-channel-listener.injectable.ts @@ -4,28 +4,11 @@ */ import ipcRendererInjectable from "../ipc-renderer.injectable"; import { getInjectable } from "@ogre-tools/injectable"; -import type { IpcRendererEvent } from "electron"; -import { enlistMessageChannelListenerInjectionToken } from "../../../../common/utils/channel/enlist-message-channel-listener-injection-token"; +import { enlistMessageChannelListenerFor, enlistMessageChannelListenerInjectionToken } from "../../../../common/utils/channel/enlist-message-channel-listener-injection-token"; const enlistMessageChannelListenerInjectable = getInjectable({ id: "enlist-message-channel-listener-for-renderer", - - instantiate: (di) => { - const ipcRenderer = di.inject(ipcRendererInjectable); - - return ({ channel, handler }) => { - const nativeCallback = (_: IpcRendererEvent, message: unknown) => { - handler(message); - }; - - ipcRenderer.on(channel.id, nativeCallback); - - return () => { - ipcRenderer.off(channel.id, nativeCallback); - }; - }; - }, - + instantiate: (di) => enlistMessageChannelListenerFor(di.inject(ipcRendererInjectable)), injectionToken: enlistMessageChannelListenerInjectionToken, });