UNPKG

@gotake/gotake-sdk

Version:

SDK for interacting with GoTake blockchain contracts

73 lines (72 loc) 2 kB
/** * Simple EventEmitter implementation for video status notifications */ /** * Simple EventEmitter implementation that allows subscribing to events and emitting events */ export class EventEmitter { constructor() { this.events = new Map(); } /** * Subscribe to an event * @param event Event name * @param listener Function to call when event is emitted * @returns Unsubscribe function */ on(event, listener) { if (!this.events.has(event)) { this.events.set(event, []); } const listeners = this.events.get(event); listeners.push(listener); // Return unsubscribe function return { unsubscribe: () => { const index = listeners.indexOf(listener); if (index !== -1) { listeners.splice(index, 1); } } }; } /** * Emit an event with data * @param event Event name * @param args Arguments to pass to listeners */ emit(event, ...args) { const listeners = this.events.get(event); if (!listeners) return; for (const listener of listeners) { try { listener(...args); } catch (error) { console.error(`Error in event listener for ${event}:`, error); } } } /** * Remove all listeners for an event or all events * @param event Optional event name, if not provided, all events are cleared */ removeAllListeners(event) { if (event) { this.events.delete(event); } else { this.events.clear(); } } /** * Check if an event has listeners * @param event Event name * @returns True if the event has listeners */ hasListeners(event) { const listeners = this.events.get(event); return !!listeners && listeners.length > 0; } }