Fix race condition that could cause multiple EventSource connections from the same client
This commit is contained in:
parent
4f90fa9924
commit
f2fd7ed016
2 changed files with 20 additions and 21 deletions
|
|
@ -40,9 +40,7 @@ const authProvider = {
|
||||||
// Avoid going to create admin dialog after logout/login without a refresh
|
// Avoid going to create admin dialog after logout/login without a refresh
|
||||||
config.firstTime = false
|
config.firstTime = false
|
||||||
if (config.devActivityPanel) {
|
if (config.devActivityPanel) {
|
||||||
startEventStream().catch((e) =>
|
startEventStream()
|
||||||
console.log('error setting up event stream:', e)
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
return response
|
return response
|
||||||
})
|
})
|
||||||
|
|
|
||||||
|
|
@ -13,12 +13,10 @@ let timeout = null
|
||||||
|
|
||||||
const getEventStream = async () => {
|
const getEventStream = async () => {
|
||||||
if (es === null) {
|
if (es === null) {
|
||||||
return httpClient(`${REST_URL}/keepalive/eventSource`).then(() => {
|
await httpClient(`${REST_URL}/keepalive/eventSource`)
|
||||||
es = new EventSource(
|
es = new EventSource(
|
||||||
baseUrl(`/app/api/events?jwt=${localStorage.getItem('token')}`)
|
baseUrl(`${REST_URL}/events?jwt=${localStorage.getItem('token')}`)
|
||||||
)
|
)
|
||||||
return es
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
return es
|
return es
|
||||||
}
|
}
|
||||||
|
|
@ -70,18 +68,21 @@ const startEventStream = async () => {
|
||||||
console.log('Cannot create a unauthenticated EventSource connection')
|
console.log('Cannot create a unauthenticated EventSource connection')
|
||||||
return Promise.reject()
|
return Promise.reject()
|
||||||
}
|
}
|
||||||
getEventStream().then((newStream) => {
|
return getEventStream()
|
||||||
newStream.addEventListener('serverStart', eventHandler)
|
.then((newStream) => {
|
||||||
newStream.addEventListener('scanStatus', eventHandler)
|
newStream.addEventListener('serverStart', eventHandler)
|
||||||
newStream.addEventListener('keepAlive', eventHandler)
|
newStream.addEventListener('scanStatus', eventHandler)
|
||||||
newStream.onerror = (e) => {
|
newStream.addEventListener('keepAlive', eventHandler)
|
||||||
console.log('EventStream error', e)
|
newStream.onerror = (e) => {
|
||||||
setTimeout(reconnectIntervalCheck)
|
console.log('EventStream error', e)
|
||||||
dispatch(serverDown())
|
setTimeout(reconnectIntervalCheck)
|
||||||
}
|
dispatch(serverDown())
|
||||||
es = newStream
|
}
|
||||||
return es
|
return newStream
|
||||||
})
|
})
|
||||||
|
.catch((e) => {
|
||||||
|
console.log(`Error connecting to server:`, e)
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
export { setDispatch, startEventStream, stopEventStream }
|
export { setDispatch, startEventStream, stopEventStream }
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue