mirror of
https://github.com/ragestudio/comty.git
synced 2025-06-09 10:34:17 +00:00
48 lines
877 B
JavaScript
48 lines
877 B
JavaScript
export default class SSEEvents {
|
|
constructor(url, events) {
|
|
this.url = url
|
|
|
|
for (const [event, handler] of Object.entries(events)) {
|
|
this.handlers.set(event, handler)
|
|
}
|
|
|
|
this.eventSource = new EventSource(url)
|
|
|
|
this.eventSource.onmessage = (event) => {
|
|
const parsed = JSON.parse(event.data)
|
|
|
|
console.debug(`[SSE] Message received`, parsed)
|
|
|
|
if (typeof parsed.event !== "string") {
|
|
console.error(`[SSE] Invalid event type: ${parsed.event}`)
|
|
return
|
|
}
|
|
|
|
this.trigger(parsed.event, parsed.data)
|
|
}
|
|
}
|
|
|
|
handlers = new Map()
|
|
|
|
on = (event, fn) => {
|
|
this.handlers.set(event, fn)
|
|
}
|
|
|
|
off = (event) => {
|
|
this.handlers.delete(event)
|
|
}
|
|
|
|
trigger = (event, data) => {
|
|
const handler = this.handlers.get(event)
|
|
|
|
if (handler) {
|
|
handler(data)
|
|
}
|
|
}
|
|
|
|
close = () => {
|
|
console.log(`[SSE] Closing connection`)
|
|
this.eventSource.close()
|
|
}
|
|
}
|