diff --git a/backend/controllers/eclair/webSocketClient.js b/backend/controllers/eclair/webSocketClient.js index e44d35f3..135f6aa4 100644 --- a/backend/controllers/eclair/webSocketClient.js +++ b/backend/controllers/eclair/webSocketClient.js @@ -54,6 +54,7 @@ export class ECLWebSocketClient { eclWsClt.webSocketClient.onopen = () => { this.logger.log({ selectedNode: eclWsClt.selectedNode, level: 'INFO', fileName: 'ECLWebSocket', msg: 'Connected to the Eclair\'s Websocket Server..' }); this.waitTime = 0.5; + this.heartbeat(eclWsClt); }; eclWsClt.webSocketClient.onclose = (e) => { if (eclWsClt && eclWsClt.selectedNode && eclWsClt.selectedNode.ln_implementation === 'ECL') { @@ -107,6 +108,17 @@ export class ECLWebSocketClient { newClient.selectedNode = JSON.parse(JSON.stringify(newSelectedNode)); this.webSocketClients[clientIdx] = newClient; }; + this.heartbeat = (eclWsClt) => { + this.logger.log({ selectedNode: eclWsClt.selectedNode, level: 'INFO', fileName: 'ECLWebSocket', msg: 'Websocket Server Heartbeat..' }); + if (!eclWsClt.webSocketClient) + return; + if (eclWsClt.webSocketClient.readyState !== 1) + return; + eclWsClt.webSocketClient.send('Pinging Server'); + setTimeout(() => { + this.heartbeat(eclWsClt); + }, 59 * 1000); + }; this.wsServer.eventEmitterECL.on('CONNECT', (nodeIndex) => { this.connect(this.common.findNode(+nodeIndex)); }); diff --git a/server/controllers/eclair/webSocketClient.ts b/server/controllers/eclair/webSocketClient.ts index 4a69cd4d..d9c58cae 100644 --- a/server/controllers/eclair/webSocketClient.ts +++ b/server/controllers/eclair/webSocketClient.ts @@ -65,6 +65,7 @@ export class ECLWebSocketClient { eclWsClt.webSocketClient.onopen = () => { this.logger.log({ selectedNode: eclWsClt.selectedNode, level: 'INFO', fileName: 'ECLWebSocket', msg: 'Connected to the Eclair\'s Websocket Server..' }); this.waitTime = 0.5; + this.heartbeat(eclWsClt); }; eclWsClt.webSocketClient.onclose = (e) => { @@ -96,6 +97,7 @@ export class ECLWebSocketClient { eclWsClt.reConnect = false; } }; + }; public disconnect = (selectedNode: CommonSelectedNode) => { @@ -117,6 +119,15 @@ export class ECLWebSocketClient { this.webSocketClients[clientIdx] = newClient; }; + public heartbeat = (eclWsClt) => { + this.logger.log({ selectedNode: eclWsClt.selectedNode, level: 'INFO', fileName: 'ECLWebSocket', msg: 'Websocket Server Heartbeat..' }); + if (!eclWsClt.webSocketClient) return; + if (eclWsClt.webSocketClient.readyState !== 1) return; + eclWsClt.webSocketClient.send('Pinging Server'); + setTimeout(() => { + this.heartbeat(eclWsClt); + }, 59 * 1000); + } } export const ECLWSClient = new ECLWebSocketClient();