summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--packages/vscode-ide-companion/src/ide-server.ts15
1 files changed, 15 insertions, 0 deletions
diff --git a/packages/vscode-ide-companion/src/ide-server.ts b/packages/vscode-ide-companion/src/ide-server.ts
index 497929a4..d14b0d7a 100644
--- a/packages/vscode-ide-companion/src/ide-server.ts
+++ b/packages/vscode-ide-companion/src/ide-server.ts
@@ -75,7 +75,22 @@ export class IDEServer {
transports[newSessionId] = transport;
},
});
+
+ const keepAlive = setInterval(() => {
+ try {
+ transport.send({ jsonrpc: '2.0', method: 'ping' });
+ } catch (e) {
+ // If sending a ping fails, the connection is likely broken.
+ // Log the error and clear the interval to prevent further attempts.
+ this.logger.append(
+ 'Failed to send keep-alive ping, cleaning up interval.' + e,
+ );
+ clearInterval(keepAlive);
+ }
+ }, 60000); // Send ping every 60 seconds
+
transport.onclose = () => {
+ clearInterval(keepAlive);
if (transport.sessionId) {
this.logger.appendLine(`Session closed: ${transport.sessionId}`);
sessionsWithInitialNotification.delete(transport.sessionId);