FreeDATA/gui/src/js/event_sock.js
2024-01-04 19:59:10 +00:00

57 lines
1.5 KiB
JavaScript

import {
eventDispatcher,
stateDispatcher,
connectionFailed,
} from "../js/eventHandler.js";
import { addDataToWaterfall } from "../js/waterfallHandler.js";
// ----------------- init pinia stores -------------
import { setActivePinia } from "pinia";
import pinia from "../store/index";
setActivePinia(pinia);
import { settingsStore as settings } from "../store/settingsStore.js";
function connect(endpoint, dispatcher) {
let socket = new WebSocket(
"ws://" + settings.local.host + ":" + settings.local.port + "/" + endpoint,
);
// handle opening
socket.addEventListener("open", function (event) {
console.log("Connected to the WebSocket server: " + endpoint);
});
// handle data
socket.addEventListener("message", function (event) {
dispatcher(event.data);
return;
});
// handle errors
socket.addEventListener("error", function (event) {
console.error("WebSocket error:", event);
connectionFailed(endpoint, event);
});
// handle closing and reconnect
socket.addEventListener("close", function (event) {
console.log("WebSocket connection closed:", event.code);
// Reconnect handler
if (!event.wasClean) {
setTimeout(() => {
console.log("Reconnecting to websocket");
connect(endpoint, dispatcher);
}, 1000);
}
});
}
// Initial connection attempts to endpoints
export function initConnections() {
connect("states", stateDispatcher);
connect("events", eventDispatcher);
connect("fft", addDataToWaterfall);
}