From 777acc77e14a27e7809c2aea89d60c4c230ca4d7 Mon Sep 17 00:00:00 2001 From: tmorin Date: Wed, 3 Nov 2021 23:02:16 +0100 Subject: [PATCH] feat(ceb-messaging-adapter-electron): add support for internal event like `error` or `dispose` --- .../src/bus-main.ts | 28 +++++++++++++++++-- .../src/bus-renderer.ts | 26 +++++++++++++++-- 2 files changed, 49 insertions(+), 5 deletions(-) diff --git a/packages/ceb-messaging-bus-adapter-ipc/src/bus-main.ts b/packages/ceb-messaging-bus-adapter-ipc/src/bus-main.ts index 118d8fdb..1ee6c708 100644 --- a/packages/ceb-messaging-bus-adapter-ipc/src/bus-main.ts +++ b/packages/ceb-messaging-bus-adapter-ipc/src/bus-main.ts @@ -15,7 +15,8 @@ import { Subscription, SubscriptionListener } from "@tmorin/ceb-messaging-core"; -import {IpcHandler, IpcMessageConverter, IpcActionError, IpcMessageMetadata, IpcSubscription} from "./bus"; +import {IpcActionError, IpcHandler, IpcMessageConverter, IpcMessageMetadata, IpcSubscription} from "./bus"; +import {BusEventListener} from "@tmorin/ceb-messaging-core/src"; /** * The implementation of {@link Bus} for the Main context of Electron IPC. @@ -28,6 +29,27 @@ export class IpcMainBus implements Bus { ) { } + emit(event: string | symbol, ...args: any[]): void { + // @ts-ignore + this.parentBus.emit.apply(this.parentBus, Array.from(arguments)) + } + + on(event: string | symbol, listener: BusEventListener): this { + // @ts-ignore + this.parentBus.on.apply(this.parentBus, Array.from(arguments)) + return this + } + + off(event?: string | symbol, listener?: BusEventListener): this { + // @ts-ignore + this.parentBus.off.apply(this.parentBus, Array.from(arguments)) + return this + } + + async dispose() { + await this.parentBus.dispose() + } + async execute(action: A, arg1?: any, arg2?: any): Promise { if (arg1) { return this.executeAndWait(action, arg1, arg2) @@ -65,7 +87,7 @@ export class IpcMainBus implements Bus { } } else { this.parentBus.execute(message) - .catch(error => console.error("IpcMainBus - the action failed", error)) + .catch(error => this.emit("error", error)) } } this.ipcMain.on(channel, ipcListener) @@ -158,7 +180,7 @@ export class IpcMainBus implements Bus { })) // forward to parent return this.parentBus.execute(action) - .catch(error => console.error("IpcMainBus - the action failed", error)) + .catch(error => this.emit("error", error)) } } diff --git a/packages/ceb-messaging-bus-adapter-ipc/src/bus-renderer.ts b/packages/ceb-messaging-bus-adapter-ipc/src/bus-renderer.ts index 2489a6f8..1f05820e 100644 --- a/packages/ceb-messaging-bus-adapter-ipc/src/bus-renderer.ts +++ b/packages/ceb-messaging-bus-adapter-ipc/src/bus-renderer.ts @@ -16,6 +16,7 @@ import { SubscriptionListener } from "@tmorin/ceb-messaging-core"; import {IpcHandler, IpcMessageConverter, IpcActionError, IpcMessageMetadata, IpcSubscription} from "./bus"; +import {BusEventListener} from "@tmorin/ceb-messaging-core/src"; /** * The implementation of {@link Bus} for the Renderer contexts of Electron IPC. @@ -28,6 +29,27 @@ export class IpcRendererBus implements Bus { ) { } + emit(event: string | symbol, ...args: any[]): void { + // @ts-ignore + this.parentBus.emit.apply(this.parentBus, Array.from(arguments)) + } + + on(event: string | symbol, listener: BusEventListener): this { + // @ts-ignore + this.parentBus.on.apply(this.parentBus, Array.from(arguments)) + return this + } + + off(event?: string | symbol, listener?: BusEventListener): this { + // @ts-ignore + this.parentBus.off.apply(this.parentBus, Array.from(arguments)) + return this + } + + async dispose() { + await this.parentBus.dispose() + } + async execute(action: A, arg1?: any, arg2?: any): Promise { if (arg1) { return this.executeAndWait(action, arg1, arg2) @@ -65,7 +87,7 @@ export class IpcRendererBus implements Bus { } } else { this.parentBus.execute(message) - .catch(error => console.error("IpcRendererBus - the action failed", error)) + .catch(error => this.emit("error", error)) } } this.ipcRenderer.on(channel, ipcListener) @@ -148,6 +170,6 @@ export class IpcRendererBus implements Bus { this.ipcRenderer.send(channel, data, {...metadata, waitForResult: false}) // forward to parent return this.parentBus.execute(action) - .catch(error => console.error("IpcMainBus - the action failed", error)) + .catch(error => this.emit("error", error)) } }