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