feat(ui): Websocket

Started implementing functionality to Websocket.
This commit is contained in:
LQ63
2025-11-26 01:35:46 +01:00
parent 52e5033afc
commit 0c2901bce0
17 changed files with 295 additions and 30 deletions

View File

@@ -1,13 +1,14 @@
type EventHandler = (data: any) => any | Promise<any>;
// javascript
let ws = null; // will be created by connectWebSocket()
const pending: Map<string, any> = new Map(); // id -> { resolve, reject, timer }
const handlers: Map<string, EventHandler> = new Map(); // eventType -> handler(data) -> (value|Promise)
const pending = new Map(); // id -> { resolve, reject, timer }
const handlers = new Map(); // eventType -> handler(data) -> (value|Promise)
let timer = null;
function onEvent(eventType, handler) {
handlers.set(eventType, handler);
}
// helper to attach message/error/close handlers to a socket
function setupSocketHandlers(socket) {
socket.onmessage = (event) => {
@@ -15,7 +16,9 @@ function setupSocketHandlers(socket) {
let msg;
try {
msg = JSON.parse(event.data);
console.log("1 " + msg.event)
} catch (e) {
console.log("2 " + msg.event)
console.debug("Non-JSON message from server:", event.data, e);
return;
}
@@ -40,6 +43,7 @@ function setupSocketHandlers(socket) {
}
if (id && eventType) {
console.log("3 " + eventType)
const handler = handlers.get(eventType);
const sendResponse = (result) => {
const response = {id: id, event: eventType, status: result};
@@ -57,6 +61,7 @@ function setupSocketHandlers(socket) {
}
try {
console.log("4 " + msg.event)
Promise.resolve(handler(data === undefined ? {} : data))
.then(_ => sendResponse("success"))
.catch(_ => sendResponse("error"));
@@ -182,9 +187,7 @@ function sendEventAndWait(eventType, eventData, timeoutMs = 10000) {
return p;
}
function onEvent(eventType: string, handler: EventHandler) {
handlers.set(eventType, handler);
}
globalThis.sendEvent = sendEvent;
globalThis.sendEventAndWait = sendEventAndWait;