Spaces:
Paused
Paused
| 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]); | |
| }; | |