ive-connect
Version:
A universal haptic device control library for interactive experiences
71 lines (70 loc) • 1.9 kB
JavaScript
;
/**
* Simple event system for device communication
*/
Object.defineProperty(exports, "__esModule", { value: true });
exports.EventEmitter = void 0;
class EventEmitter {
constructor() {
this.events = new Map();
}
/**
* Register an event listener
* @param event Event name
* @param callback Function to call when event is emitted
* @returns Unsubscribe function
*/
on(event, callback) {
if (!this.events.has(event)) {
this.events.set(event, new Set());
}
this.events.get(event).add(callback);
// Return unsubscribe function
return () => this.off(event, callback);
}
/**
* Remove an event listener
* @param event Event name
* @param callback Function to remove
*/
off(event, callback) {
const callbacks = this.events.get(event);
if (callbacks) {
callbacks.delete(callback);
if (callbacks.size === 0) {
this.events.delete(event);
}
}
}
/**
* Emit an event with data
* @param event Event name
* @param data Data to pass to listeners
*/
emit(event, data) {
const callbacks = this.events.get(event);
if (callbacks) {
for (const callback of callbacks) {
try {
callback(data);
}
catch (e) {
console.error(`Error in event listener for ${event}:`, e);
}
}
}
}
/**
* Remove all event listeners
* @param event Optional event name. If not provided, all events are cleared.
*/
removeAllListeners(event) {
if (event) {
this.events.delete(event);
}
else {
this.events.clear();
}
}
}
exports.EventEmitter = EventEmitter;