Spaces:
Paused
Paused
File size: 1,074 Bytes
d075dbf | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | import { useEffect } from 'react';
type EventHandler = (data: any) => void;
class NeuralEventBus {
private listeners: Map<string, EventHandler[]> = new Map();
on(event: string, handler: EventHandler) {
if (!this.listeners.has(event)) {
this.listeners.set(event, []);
}
this.listeners.get(event)?.push(handler);
}
off(event: string, handler: EventHandler) {
const handlers = this.listeners.get(event);
if (handlers) {
this.listeners.set(event, handlers.filter(h => h !== handler));
}
}
emit(event: string, data: any) {
const handlers = this.listeners.get(event);
if (handlers) {
handlers.forEach(h => h(data));
}
}
}
export const neuralEventBus = new NeuralEventBus();
export const emitNeuralEvent = (event: string, data: any) => {
neuralEventBus.emit(event, data);
};
export const useNeuralEvent = (event: string, handler: EventHandler) => {
useEffect(() => {
neuralEventBus.on(event, handler);
return () => {
neuralEventBus.off(event, handler);
};
}, [event, handler]);
};
|