Files
signalk-plugin/plugin/cores/realtime/core.js
Giuseppe Raffa bb8d267cd4 Aggiunta stili CSS per Kiosk, struttura HTML per la Mappa e Riferimenti ai Sensori
• Creato un nuovo file CSS per gli stili del chiosco (kiosk) con variabili, stili per le schede (card) e animazioni.
• Aggiunto un file HTML per l'interfaccia della mappa utilizzando Mapbox, inclusi gli stili e il JavaScript per le funzionalità della mappa.
• Introdotto un file JSON per i riferimenti ai sensori, definendo percorsi ed elementi per i dati di temperatura, vento, onde, posizione, batteria, motore e sistema.

Co-authored-by: Copilot <copilot@github.com>
2026-04-23 16:19:11 +02:00

107 lines
2.3 KiB
JavaScript

const os = require('os');
const auth = require('./auth');
const socket = require('./socket');
const configManager = require('../../config/configManager.js');
let reconnectTimer = null;
let isShuttingDown = false;
/**
* Inizializza la connessione al server realtime.
* Autentica il sensore e apre la connessione WebSocket.
* In caso di disconnessione, tenta di riconnettersi.
*/
async function init() {
isShuttingDown = false;
await connectToServer();
}
/**
* Esegue il flusso di connessione: auth → websocket
*/
async function connectToServer() {
if (isShuttingDown) return;
console.log('CONNECTING......')
const result = await auth.authenticate();
console.log('AUTH RESULT:', result);
if (!result) {
scheduleReconnect();
return;
}
const connected = await socket.connect(result.socketToken, () => {
if (!isShuttingDown) {
scheduleReconnect();
}
});
if (!connected) {
scheduleReconnect();
}
}
/**
* Pianifica un tentativo di riconnessione dopo il ritardo configurato.
*/
function scheduleReconnect() {
if (reconnectTimer || isShuttingDown) return;
const RECONNECT_DELAY = configManager.getReconnectDelay();
console.log(`[REALTIME] riconnessione in ${RECONNECT_DELAY / 1000}s...`);
reconnectTimer = setTimeout(async () => {
reconnectTimer = null;
await connectToServer();
}, RECONNECT_DELAY);
}
/**
* Invia dati al server se la connessione è attiva.
* @param {Array} data - Array nel formato [timestamp, measurement, fields]
*/
function send(data) {
if (socket.isConnected()) {
socket.send(data);
}
}
/**
* Invia un oggetto raw al server (senza trasformazione [ts, _m, fields]).
* Usato per forecast_batch e altri messaggi con struttura custom.
*/
function sendRaw(obj) {
if (socket.isConnected()) {
socket.sendRaw(obj);
}
}
/**
* @returns {boolean} true se la connessione WebSocket è attiva
*/
function isConnected() {
return socket.isConnected();
}
/**
* Ferma la connessione e i tentativi di riconnessione.
*/
function stop() {
isShuttingDown = true;
if (reconnectTimer) {
clearTimeout(reconnectTimer);
reconnectTimer = null;
}
socket.close();
}
module.exports = {
init,
send,
sendIfConnected: send,
sendRaw,
isConnected,
stop
};