mirror of
https://github.com/OliveTin/OliveTin
synced 2025-12-13 01:25:45 +00:00
82 lines
2.2 KiB
JavaScript
82 lines
2.2 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 'EventOutputChunk':
|
|
case 'EventConfigChanged':
|
|
case 'EventExecutionFinished':
|
|
case 'EventExecutionStarted':
|
|
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('Websocket error is: ', err)
|
|
|
|
window.showBigError('websocket-connection', 'connecting to the websocket', 'This often means the connection was closed, sometimes this can happen due to reverse proxy timeouts. Sometimes your web browser can provide helpful diagnostic information in the web developer console. The reason given by your browser is:' + err, true)
|
|
|
|
refreshServerConnectionLabel()
|
|
}
|
|
|
|
function websocketOnClose () {
|
|
window.websocketAvailable = false
|
|
|
|
refreshServerConnectionLabel()
|
|
}
|