/** * 轻量事件总线:用于 BLE Core 与业务模块之间的事件解耦。 */ export function createEventBus() { const listeners = {} function on(eventName, handler) { if (!listeners[eventName]) { listeners[eventName] = new Set() } listeners[eventName].add(handler) // 返回取消订阅函数,方便调用方在页面卸载时回收监听。 return () => { off(eventName, handler) } } function once(eventName, handler) { const unsubscribe = on(eventName, (payload) => { unsubscribe() handler(payload) }) return unsubscribe } function off(eventName, handler) { if (!listeners[eventName]) { return } listeners[eventName].delete(handler) } function emit(eventName, payload) { if (!listeners[eventName]) { return } listeners[eventName].forEach((handler) => { try { handler(payload) } catch (error) { console.error('[BLE event handler error]', eventName, error) } }) } function clear() { Object.keys(listeners).forEach((eventName) => { listeners[eventName].clear() }) } return { on, once, off, emit, clear } }