import { SpecialPropertyMessage } from '../messages/SpecialPropertyMessage'; import { ClientSpecialProperty } from './ClientSpecialProperty'; export type ClientEventHandler = (data: any) => void; export class ClientEvent implements ClientSpecialProperty { public action: any; private listeners = new Set(); public subscribe(cb: ClientEventHandler): void { this.listeners.add(cb); } public unsubscribe(cb: ClientEventHandler): boolean { return this.listeners.delete(cb); } public unsubscribeAll(): void { this.listeners.clear(); } public onMessage(message: SpecialPropertyMessage) { this.listeners.forEach((handler) => { handler(message.data); }); } }