mirror of
https://github.com/OliveTin/OliveTin
synced 2025-12-11 16:45:42 +00:00
62 lines
1.6 KiB
JavaScript
62 lines
1.6 KiB
JavaScript
import { buttonResults } from '../resources/vue/stores/buttonResults.js'
|
|
|
|
export function initWebsocket () {
|
|
window.addEventListener('EventOutputChunk', onOutputChunk)
|
|
|
|
reconnectWebsocket()
|
|
}
|
|
|
|
window.websocketAvailable = false
|
|
|
|
async function reconnectWebsocket () {
|
|
if (window.websocketAvailable) {
|
|
return
|
|
}
|
|
|
|
try {
|
|
window.websocketAvailable = true
|
|
for await (const 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':
|
|
buttonResults[msg.event.value.logEntry.executionTrackingId] = msg.event.value.logEntry
|
|
window.dispatchEvent(j)
|
|
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)
|
|
}
|
|
}
|
|
|
|
function onOutputChunk (evt) {
|
|
const chunk = evt.payload
|
|
|
|
if (window.terminal) {
|
|
if (chunk.executionTrackingId === window.terminal.executionTrackingId) {
|
|
window.terminal.write(chunk.output)
|
|
}
|
|
}
|
|
}
|