Files
OliveTin/frontend/js/websocket.js
2025-08-20 00:05:40 +01:00

50 lines
1.4 KiB
JavaScript

import { buttonResults } from '../resources/vue/stores/buttonResults.js'
export function checkWebsocketConnection () {
reconnectWebsocket()
}
window.websocketAvailable = false
async function reconnectWebsocket () {
if (window.websocketAvailable) {
return
}
try {
window.websocketAvailable = true
for await (let e of window.client.eventStream()) {
handleEvent(e)
}
} catch (err) {
console.error('Websocket connection failed: ', err)
}
window.websocketAvailable = false
console.log('Reconnecting websocket...')
}
function handleEvent (msg) {
const typeName = msg.event.value.$typeName.replace('olivetin.api.v1.', '')
const j = new Event(typeName)
j.payload = msg.event.value
switch (typeName) {
case 'EventOutputChunk':
case 'EventConfigChanged':
case 'EventEntityChanged':
window.dispatchEvent(j)
break
case 'EventExecutionFinished':
case 'EventExecutionStarted':
console.log('EventExecutionStarted', msg.event.value.logEntry.executionTrackingId)
buttonResults[msg.event.value.logEntry.executionTrackingId] = msg.event.value.logEntry
break
default:
console.warn('Unhandled websocket message type from server: ', typeName)
window.showBigError('ws-unhandled-message', 'handling websocket message', 'Unhandled websocket message type from server: ' + typeName, true)
}
}