fix race condition
This commit is contained in:
parent
2046af1407
commit
fdc14a5021
|
|
@ -24,13 +24,14 @@ function convert(app: BackendApp): SharedApp {
|
|||
// SSE: full app state snapshots for the dashboard UI (every state change)
|
||||
// For discrete lifecycle events consumed by app processes, see /api/events/stream
|
||||
router.sse('/stream', (send) => {
|
||||
let queue = Promise.resolve()
|
||||
const broadcast = () => {
|
||||
const apps: SharedApp[] = allApps().map(({
|
||||
name, state, icon, error, port, started, logs, tool, tunnelEnabled, tunnelUrl
|
||||
}) => ({
|
||||
name, state, icon, error, port, started, logs, tool, tunnelEnabled, tunnelUrl,
|
||||
}))
|
||||
send(apps)
|
||||
queue = queue.then(() => send(apps))
|
||||
}
|
||||
|
||||
broadcast()
|
||||
|
|
|
|||
|
|
@ -7,8 +7,12 @@ const router = Hype.router()
|
|||
// Unlike /api/apps/stream (full state snapshots for the dashboard), this sends
|
||||
// individual events so apps can react to specific lifecycle changes.
|
||||
router.sse('/stream', (send) => {
|
||||
const unsub = onEvent(event => send(event))
|
||||
const heartbeat = setInterval(() => send('', 'ping'), 60_000)
|
||||
let queue = Promise.resolve()
|
||||
const safeSend = (...args: Parameters<typeof send>) => {
|
||||
queue = queue.then(() => send(...args))
|
||||
}
|
||||
const unsub = onEvent(event => safeSend(event))
|
||||
const heartbeat = setInterval(() => safeSend('', 'ping'), 60_000)
|
||||
return () => {
|
||||
clearInterval(heartbeat)
|
||||
unsub()
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user