@gotake/gotake-sdk
Version:
SDK for interacting with GoTake blockchain contracts
73 lines (72 loc) • 2 kB
JavaScript
/**
* 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;
}
}