Spaces:
Paused
Paused
File size: 1,440 Bytes
49f9107 | 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 45 46 47 48 49 50 51 52 53 54 55 56 57 | import { useEffect, useCallback } from 'react';
interface NeuralEvent {
source: string;
data: any;
options?: { priority?: 'low' | 'medium' | 'high' | 'critical' };
}
type EventHandler = (event: NeuralEvent) => 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, neuralEvent: NeuralEvent) {
const handlers = this.listeners.get(event);
if (handlers) {
handlers.forEach(h => h(neuralEvent));
}
}
}
export const neuralEventBus = new NeuralEventBus();
export const emitNeuralEvent = (
event: string,
source: string,
data: any,
options?: { priority?: 'low' | 'medium' | 'high' | 'critical' }
) => {
neuralEventBus.emit(event, { source, data, options });
};
export const useNeuralEvent = (event: string, handler: (event: NeuralEvent) => void) => {
const stableHandler = useCallback(handler, []);
useEffect(() => {
neuralEventBus.on(event, stableHandler);
return () => {
neuralEventBus.off(event, stableHandler);
};
}, [event, stableHandler]);
};
|