Files
XCDesktop/api/events/eventBus.ts

36 lines
926 B
TypeScript
Raw Normal View History

2026-03-08 01:34:54 +08:00
import type { Response } from 'express'
import { logger } from '../utils/logger.js'
type NotebookEvent = {
event: string
path?: string
}
let clients: Response[] = []
export const eventBus = {
addClient: (res: Response) => {
clients.push(res)
logger.info(`SSE client connected. Total clients: ${clients.length}`)
},
removeClient: (res: Response) => {
clients = clients.filter((c) => c !== res)
logger.info(`SSE client disconnected. Total clients: ${clients.length}`)
},
broadcast: (payload: NotebookEvent) => {
const data = `data: ${JSON.stringify(payload)}
`
logger.info(`Broadcasting to ${clients.length} clients: ${payload.event} - ${payload.path || ''}`)
clients = clients.filter((client) => {
try {
client.write(data)
return true
} catch (error) {
logger.warn('SSE client write failed, removing')
return false
}
})
},
}