-
Notifications
You must be signed in to change notification settings - Fork 0
/
nodo.js
61 lines (47 loc) · 1.83 KB
/
nodo.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
import net from 'node:net';
import { puertoMaestro } from './constantes';
const obtenerDesfasajeRandomEntre = (min, max) => Math.floor(Math.random() * (max - min + 1) + min);
const desfasaje = obtenerDesfasajeRandomEntre(-500, 500);
let tiempoNodo = Date.now() + desfasaje;
const idNodo = crypto.randomUUID()
const nodo = new net.Socket();
let conexionActiva = false;
nodo.connect(puertoMaestro, 'localhost', () => {
console.log('Conectado al nodo maestro');
conexionActiva = true;
const enviarHoraCada5Segundos = setInterval(() => {
if (conexionActiva){
// Cada 5 segundos hace una peticion al nodo maestro para ajustarse
console.log(`Enviando tiempo al nodo maestro: ${tiempoNodo}`);
nodo.write(JSON.stringify({ id: idNodo, tiempo: tiempoNodo }));
}
else clearInterval(enviarHoraCada5Segundos)
}, 5000);
nodo.on('data', (data) => {
const msgNodoMaestro = JSON.parse(data.toString());
// Si recibe un ajuste, lo aplica
if (msgNodoMaestro.ajuste) {
const tiempoPrevioLegible = new Date(tiempoNodo).toLocaleString();
let tiempoAjustado = tiempoNodo + msgNodoMaestro.ajuste;
const tiempoAjustadoLegible = new Date(tiempoAjustado).toLocaleString();
console.log(`Ajuste recibido: ${msgNodoMaestro.ajuste}. Antes el tiempo era ${tiempoPrevioLegible} y ahora el tiempo es ${tiempoAjustadoLegible}`);
}
});
nodo.on('error', (error) => {
console.error('Error:', error);
conexionActiva = false;
});
nodo.on('close', () => {
console.log('Conexión cerrada');
conexionActiva = false;
});
nodo.on('end', () => {
console.log('Desconectado del nodo maestro');
conexionActiva = false;
});
});
function actualizarRelojNodo(){
tiempoNodo = Date.now() + desfasaje;
}
// Actualiza el reloj cada 100ms
setInterval(actualizarRelojNodo, 100);