wrapped-sse
This commit is contained in:
parent
9c263b697e
commit
121cbfdbdd
|
@ -6,7 +6,7 @@ import { ShowIfAuthenticated } from '../components/_shared/ShowIfAuthenticated'
|
|||
import { NotificationsPanel } from '../components/NotificationsPanel'
|
||||
import { createStore } from 'solid-js/store'
|
||||
import { IDBPDatabase, openDB } from 'idb'
|
||||
// import { fetchEventSource } from '@microsoft/fetch-event-source'
|
||||
import { fetchEventSource } from '@microsoft/fetch-event-source'
|
||||
import { getToken } from '../graphql/privateGraphQLClient'
|
||||
import { Author, Message, Reaction, Shout } from '../graphql/types.gen'
|
||||
|
||||
|
@ -90,19 +90,23 @@ export const NotificationsProvider = (props: { children: JSX.Element }) => {
|
|||
|
||||
const [messageHandler, setMessageHandler] = createSignal<(m: Message) => void>()
|
||||
|
||||
createEffect(() => {
|
||||
createEffect(async () => {
|
||||
if (isAuthenticated()) {
|
||||
loadNotifications()
|
||||
|
||||
const token = getToken()
|
||||
const eventSource = new EventSource(`https://connect.discours.io/${token}`)
|
||||
|
||||
eventSource.onmessage = (event) => {
|
||||
console.log('[context.notifications] Received event:', event)
|
||||
await fetchEventSource('https://chat.discours.io/connect', {
|
||||
method: 'GET',
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
Authorization: 'Bearer ' + getToken()
|
||||
},
|
||||
onmessage(event) {
|
||||
const n: { kind: string; payload: any } = JSON.parse(event.data)
|
||||
if (n.kind === 'new_message') {
|
||||
console.log('[context.notifications] Received message:', n)
|
||||
messageHandler()(n.payload)
|
||||
} else {
|
||||
console.log('[context.notifications] Received notification:', n)
|
||||
storeNotification({
|
||||
kind: n.kind,
|
||||
payload: n.payload,
|
||||
|
@ -110,12 +114,15 @@ export const NotificationsProvider = (props: { children: JSX.Element }) => {
|
|||
seen: false
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
eventSource.onerror = (err) => {
|
||||
},
|
||||
onclose() {
|
||||
console.log('[context.notifications] sse connection closed by server')
|
||||
},
|
||||
onerror(err) {
|
||||
console.error('[context.notifications] sse connection closed by error', err)
|
||||
eventSource.close()
|
||||
throw new Error() // NOTE: simple hack to close the connection
|
||||
}
|
||||
})
|
||||
}
|
||||
})
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user