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>
This commit is contained in:
106
plugin/cores/realtime/core.js
Normal file
106
plugin/cores/realtime/core.js
Normal file
@@ -0,0 +1,106 @@
|
||||
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
|
||||
};
|
||||
Reference in New Issue
Block a user