mirror of
https://github.com/pezkuwichain/pezkuwi-telemetry.git
synced 2026-07-04 00:17:29 +00:00
Send ping to the node
This commit is contained in:
@@ -14,6 +14,8 @@ export interface NodeEvents {
|
||||
emit(event: 'location', location: Location): void;
|
||||
}
|
||||
|
||||
function noop() {}
|
||||
|
||||
export default class Node {
|
||||
public readonly id: Types.NodeId;
|
||||
public readonly name: Types.NodeName;
|
||||
@@ -40,6 +42,7 @@ export default class Node {
|
||||
private readonly socket: WebSocket;
|
||||
private blockTimes: Array<number> = new Array(BLOCK_TIME_HISTORY);
|
||||
private lastBlockAt: Maybe<Date> = null;
|
||||
private pingStart = 0 as Types.Timestamp;
|
||||
|
||||
constructor(
|
||||
ip: string,
|
||||
@@ -61,6 +64,8 @@ export default class Node {
|
||||
this.lastMessage = timestamp();
|
||||
this.socket = socket;
|
||||
|
||||
let start = Date.now();
|
||||
|
||||
socket.on('message', (data) => {
|
||||
const message = parseMessage(data);
|
||||
|
||||
@@ -83,6 +88,11 @@ export default class Node {
|
||||
this.disconnect();
|
||||
});
|
||||
|
||||
socket.on('pong', () => {
|
||||
this.latency = (timestamp() - this.pingStart) as Types.Milliseconds;
|
||||
this.pingStart = 0 as Types.Timestamp;
|
||||
});
|
||||
|
||||
// Handle cached messages
|
||||
for (const message of messages) {
|
||||
this.onMessage(message);
|
||||
@@ -135,7 +145,7 @@ export default class Node {
|
||||
const timeout = setTimeout(() => {
|
||||
cleanup();
|
||||
|
||||
socket.close();
|
||||
socket.terminate();
|
||||
|
||||
return reject(new Error('Timeout on waiting for system.connected message'));
|
||||
}, 5000);
|
||||
@@ -145,6 +155,8 @@ export default class Node {
|
||||
public timeoutCheck(now: Types.Timestamp) {
|
||||
if (this.lastMessage + TIMEOUT < now) {
|
||||
this.disconnect();
|
||||
} else {
|
||||
this.updateLatency(now);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -194,14 +206,13 @@ export default class Node {
|
||||
|
||||
private disconnect() {
|
||||
this.socket.removeAllListeners();
|
||||
this.socket.close();
|
||||
this.socket.terminate();
|
||||
|
||||
this.events.emit('disconnect');
|
||||
}
|
||||
|
||||
private onMessage(message: Message) {
|
||||
this.lastMessage = timestamp();
|
||||
this.updateLatency(message.ts);
|
||||
|
||||
const update = getBestBlock(message);
|
||||
|
||||
@@ -225,8 +236,15 @@ export default class Node {
|
||||
}
|
||||
}
|
||||
|
||||
private updateLatency(time: Date) {
|
||||
this.latency = (this.lastMessage - +time) as Types.Milliseconds;
|
||||
private updateLatency(now: Types.Timestamp) {
|
||||
// if (this.pingStart) {
|
||||
// console.error(`${this.name} timed out on ping message.`);
|
||||
// this.disconnect();
|
||||
// return;
|
||||
// }
|
||||
|
||||
this.pingStart = now;
|
||||
this.socket.ping(noop);
|
||||
}
|
||||
|
||||
private updateBestBlock(update: BestBlock) {
|
||||
|
||||
Reference in New Issue
Block a user