mirror of
https://github.com/OliveTin/OliveTin
synced 2025-12-14 10:05:41 +00:00
* feature: OliveTin now relies on websocket, and will show a big error if it isnt available * feature: OliveTin now relies on websocket, and will show a big error if it isnt available
79 lines
1.9 KiB
JavaScript
79 lines
1.9 KiB
JavaScript
import {
|
|
refreshServerConnectionLabel
|
|
} from './marshaller.js'
|
|
|
|
window.ws = null
|
|
|
|
export function checkWebsocketConnection () {
|
|
if (window.ws === null || window.ws.readyState === 3) {
|
|
reconnectWebsocket()
|
|
}
|
|
}
|
|
|
|
function reconnectWebsocket () {
|
|
window.websocketAvailable = false
|
|
|
|
const websocketConnectionUrl = new URL(window.location.toString())
|
|
websocketConnectionUrl.hash = ''
|
|
websocketConnectionUrl.pathname += 'websocket'
|
|
|
|
if (window.location.protocol === 'https:') {
|
|
websocketConnectionUrl.protocol = 'wss'
|
|
} else {
|
|
websocketConnectionUrl.protocol = 'ws'
|
|
}
|
|
|
|
window.websocketConnectionUrl = websocketConnectionUrl
|
|
|
|
const ws = window.ws = new WebSocket(websocketConnectionUrl.toString())
|
|
|
|
ws.addEventListener('open', websocketOnOpen)
|
|
ws.addEventListener('message', websocketOnMessage)
|
|
ws.addEventListener('error', websocketOnError)
|
|
ws.addEventListener('close', websocketOnClose)
|
|
}
|
|
|
|
function websocketOnOpen (evt) {
|
|
window.websocketAvailable = true
|
|
|
|
window.ws.send('monitor')
|
|
|
|
refreshServerConnectionLabel()
|
|
|
|
window.refreshLoop()
|
|
}
|
|
|
|
function websocketOnMessage (msg) {
|
|
// FIXME check msg status is OK
|
|
const j = JSON.parse(msg.data)
|
|
|
|
const e = new Event(j.type)
|
|
e.payload = j.payload
|
|
|
|
switch (j.type) {
|
|
case 'EventConfigChanged':
|
|
case 'EventExecutionFinished':
|
|
case 'EventEntityChanged':
|
|
window.dispatchEvent(e)
|
|
break
|
|
default:
|
|
window.showBigError('ws-unhandled-message', 'handling websocket message', 'Unhandled websocket message type from server: ' + j.type, true)
|
|
}
|
|
}
|
|
|
|
function websocketOnError (err) {
|
|
window.websocketAvailable = false
|
|
window.refreshLoop()
|
|
console.log(err)
|
|
|
|
window.showBigError('ws-connect-error', 'connecting to the websocket', 'Please see your browser console for debugging information.', true)
|
|
|
|
refreshServerConnectionLabel()
|
|
}
|
|
|
|
function websocketOnClose () {
|
|
window.websocketAvailable = false
|
|
|
|
refreshServerConnectionLabel()
|
|
}
|