import { IpcMain } from 'electron'; import { Event } from '../Events'; import { EventBusInterface } from "./EventBusInterface"; export class IpcMainEventBus implements EventBusInterface { private ipc: IpcMain; private client: any; constructor(ipc: IpcMain) { this.ipc = ipc; } public subscribe(subscribeEvent: Event, callback: (msg: MessageType) => void) { console.log('subscribing', subscribeEvent.topic); this.ipc.on(subscribeEvent.topic, (event: any, arg: any) => { this.client = event.sender; callback(arg); }); } public unsubscribeAll(event: Event) { console.log('unsubscribeAll', event.topic); this.ipc.removeAllListeners(event.topic); } public unsubscribe(event: Event, callback: any) { throw new Error('Not implemented'); // Todo: implement } public emit(event: Event, msg: MessageType) { if (!this.client.isDestroyed()) { this.client.send(event.topic, msg); } } }