mirror of
https://github.com/ragestudio/comty.git
synced 2025-06-10 19:14:16 +00:00
added sseevents
This commit is contained in:
parent
58d93d9f9b
commit
379838d0f7
47
packages/app/src/classes/SSEEvents/index.js
Normal file
47
packages/app/src/classes/SSEEvents/index.js
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
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()
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user