Files
horror/frontend/src/live.js
2026-09-30 19:53:27 +02:00

30 lines
834 B
JavaScript

// Ein Kanal für die ganze Seite. Mehrere Komponenten lauschen mit, ohne
// dass jede eine eigene Verbindung aufmacht.
let quelle = null
const hoerer = new Set()
function oeffnen() {
quelle = new EventSource('/api/events')
quelle.onmessage = (ereignis) => {
const nachricht = JSON.parse(ereignis.data)
hoerer.forEach((h) => h(nachricht))
}
// Der Browser verbindet nach einem Abbruch von selbst neu
}
export function abonnieren(fn) {
hoerer.add(fn)
if (!quelle) oeffnen()
return () => hoerer.delete(fn)
}
// Der Server merkt sich je Verbindung die Sitzung — daran hängt der
// grüne Punkt. In einem frischen Browser steht die Verbindung, bevor
// das Cookie da ist. Nach dem Namenswechsel darum einmal neu verbinden.
export function neuVerbinden() {
if (!quelle) return
quelle.close()
oeffnen()
}