@sailingrotevista/rotevista-dash 6.0.6 → 6.0.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/app.js +41 -30
- package/package.json +1 -1
package/app.js
CHANGED
|
@@ -1317,13 +1317,26 @@ function connect() {
|
|
|
1317
1317
|
let addr = window.location.host || CONFIG.server.fallbackIp;
|
|
1318
1318
|
try {
|
|
1319
1319
|
socket = new WebSocket(`ws://${addr}/signalk/v1/stream?subscribe=self`);
|
|
1320
|
-
|
|
1320
|
+
|
|
1321
|
+
socket.onopen = async () => {
|
|
1322
|
+
ui.status.className = "online";
|
|
1323
|
+
ui.status.innerText = "ONLINE";
|
|
1324
|
+
reconnectDelay = 1000;
|
|
1325
|
+
|
|
1326
|
+
// SINCRONIZZAZIONE AUTOMATICA: Ogni volta che la connessione si apre o si riapre,
|
|
1327
|
+
// scarichiamo lo storico fresco dal server e ridisegnamo i grafici
|
|
1328
|
+
try {
|
|
1329
|
+
await fetchServerHistory();
|
|
1330
|
+
['stw', 'sog', 'depth', 'tws'].forEach(refreshGraph);
|
|
1331
|
+
} catch (err) {
|
|
1332
|
+
console.warn("⚠️ Sincronizzazione storico fallita alla connessione:", err);
|
|
1333
|
+
}
|
|
1334
|
+
};
|
|
1321
1335
|
|
|
1322
1336
|
socket.onmessage = (e) => {
|
|
1323
1337
|
const d = JSON.parse(e.data);
|
|
1324
1338
|
if (d.updates) {
|
|
1325
1339
|
d.updates.forEach(u => {
|
|
1326
|
-
// ESTRAZIONE AVANZATA DELLA SORGENTE (Gestisce $source e stringhe native)
|
|
1327
1340
|
let sourceLabel = "Unknown";
|
|
1328
1341
|
if (u.$source) {
|
|
1329
1342
|
sourceLabel = u.$source;
|
|
@@ -1342,8 +1355,17 @@ function connect() {
|
|
|
1342
1355
|
}
|
|
1343
1356
|
};
|
|
1344
1357
|
|
|
1345
|
-
socket.onclose = () => {
|
|
1346
|
-
|
|
1358
|
+
socket.onclose = () => {
|
|
1359
|
+
if (!simulationMode) {
|
|
1360
|
+
ui.status.className = "offline";
|
|
1361
|
+
ui.status.innerText = "RECONNECTING...";
|
|
1362
|
+
setTimeout(connect, reconnectDelay);
|
|
1363
|
+
reconnectDelay = Math.min(reconnectDelay * 1.5, 10000);
|
|
1364
|
+
}
|
|
1365
|
+
};
|
|
1366
|
+
} catch (e) {
|
|
1367
|
+
setTimeout(connect, reconnectDelay);
|
|
1368
|
+
}
|
|
1347
1369
|
}
|
|
1348
1370
|
|
|
1349
1371
|
// ==========================================================================
|
|
@@ -1366,46 +1388,35 @@ window.addEventListener('contextmenu', e => e.preventDefault(), true);
|
|
|
1366
1388
|
async function init() {
|
|
1367
1389
|
loadDashboardState();
|
|
1368
1390
|
|
|
1369
|
-
//
|
|
1370
|
-
try {
|
|
1371
|
-
await fetchServerHistory();
|
|
1372
|
-
} catch (err) {
|
|
1373
|
-
console.warn("⚠️ Impossibile caricare lo storico dal server.");
|
|
1374
|
-
}
|
|
1375
|
-
|
|
1391
|
+
// Proviamo un primo caricamento configurazioni
|
|
1376
1392
|
await fetchServerConfig();
|
|
1377
1393
|
startDisplayLoop();
|
|
1378
|
-
connect();
|
|
1394
|
+
connect();
|
|
1379
1395
|
|
|
1380
1396
|
setInterval(watchConfigChanges, 10000);
|
|
1381
1397
|
|
|
1382
1398
|
// ==========================================================================
|
|
1383
|
-
//
|
|
1399
|
+
// RICONNESSIONE RAPIDA AL RISVEGLIO (VISIBILITY WATCHDOG)
|
|
1384
1400
|
// ==========================================================================
|
|
1385
1401
|
|
|
1386
|
-
//
|
|
1402
|
+
// Quando sblocchi l'iPad o riapri il browser, forziamo la chiusura del vecchio
|
|
1403
|
+
// WebSocket orfano. Questo farà scattare immediatamente connect() e la sincronizzazione.
|
|
1387
1404
|
document.addEventListener('visibilitychange', () => {
|
|
1388
1405
|
if (document.visibilityState === 'visible') {
|
|
1389
|
-
|
|
1406
|
+
console.log("⏰ Schermo sbloccato: forzatura riconnessione rapida.");
|
|
1407
|
+
if (socket) {
|
|
1408
|
+
try {
|
|
1409
|
+
socket.close(); // Fa scattare onclose -> connect() -> onopen -> fetchServerHistory()
|
|
1410
|
+
} catch (e) {
|
|
1411
|
+
connect();
|
|
1412
|
+
}
|
|
1413
|
+
} else {
|
|
1414
|
+
connect();
|
|
1415
|
+
}
|
|
1390
1416
|
}
|
|
1391
1417
|
});
|
|
1392
|
-
|
|
1393
|
-
// Rileva se il computer è andato in sospensione misurando il ritardo dei secondi
|
|
1394
|
-
let lastHeartbeat = Date.now();
|
|
1395
|
-
setInterval(() => {
|
|
1396
|
-
const now = Date.now();
|
|
1397
|
-
const diff = now - lastHeartbeat;
|
|
1398
|
-
lastHeartbeat = now;
|
|
1399
|
-
|
|
1400
|
-
// Se passano più di 6 secondi tra un ciclo e l'altro (invece di 1 secondo),
|
|
1401
|
-
// significa che il PC era in sospensione. Avviamo il risveglio.
|
|
1402
|
-
if (diff > 6000) {
|
|
1403
|
-
handleWakeUp();
|
|
1404
|
-
}
|
|
1405
|
-
}, 1000);
|
|
1406
1418
|
}
|
|
1407
1419
|
|
|
1408
1420
|
|
|
1409
|
-
|
|
1410
1421
|
window.addEventListener('load', init);
|
|
1411
1422
|
window.addEventListener('pagehide', saveDashboardState);
|