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) } } }