From 5576093c18b97841e36f608ac657a80a29489c31 Mon Sep 17 00:00:00 2001 From: utf-4096 Date: Sat, 15 Jul 2023 14:15:14 +0200 Subject: [PATCH] feat: add KeepAlive packet --- src/Client.js | 18 +++++++++++++++++- src/Protocol.js | 9 ++++++--- src/protocol | 2 +- 3 files changed, 24 insertions(+), 5 deletions(-) diff --git a/src/Client.js b/src/Client.js index ee73fef..4f55ba0 100644 --- a/src/Client.js +++ b/src/Client.js @@ -6,7 +6,8 @@ import { PublishRequest, PublishResponse, DiscoverRequest, - DiscoverResponse + DiscoverResponse, + KeepAlive } from './Protocol.js' import { EventEmitter } from 'events' @@ -17,6 +18,8 @@ export class Client extends EventEmitter { #ws #id #address + #keepAliveInterval + #lastPacketDate = 0 constructor(gateway) { super() @@ -33,6 +36,8 @@ export class Client extends EventEmitter { const buf = Container.encode(container).finish() console.log('sending:', buf) this.#ws.send(buf) + + this.#lastPacketDate = Date.now() } #protoRequest(message) { @@ -67,6 +72,15 @@ export class Client extends EventEmitter { const auth = AuthenticationResponse.toObject(response.AuthenticationResponse, { longs: String }) this.#address = BigInt(auth.address) + // send packets periodically to keep the connection alive + this.#keepAliveInterval = setInterval(async () => { + if ((Date.now() - this.#lastPacketDate) > 30000) { + await this.#protoRequest(KeepAlive.create({ + data: Date.now() + })) + } + }, 15000) + this.emit('ready') } @@ -81,6 +95,8 @@ export class Client extends EventEmitter { ws.onclose = () => { this.emit('close') + clearInterval(this.#keepAliveInterval) + this.#keepAliveInterval = null } } diff --git a/src/Protocol.js b/src/Protocol.js index 3bd9084..c37193c 100644 --- a/src/Protocol.js +++ b/src/Protocol.js @@ -18,7 +18,8 @@ export const [ PublishRequest, PublishResponse, DiscoverRequest, - DiscoverResponse + DiscoverResponse, + KeepAlive ] = import_proto(encoders, [ 'Container', 'AuthenticationRequest', @@ -27,7 +28,8 @@ export const [ 'PublishRequest', 'PublishResponse', 'DiscoverRequest', - 'DiscoverResponse' + 'DiscoverResponse', + 'KeepAlive' ]) export const messages = [ @@ -38,5 +40,6 @@ export const messages = [ PublishRequest, PublishResponse, DiscoverRequest, - DiscoverResponse + DiscoverResponse, + KeepAlive ] diff --git a/src/protocol b/src/protocol index d0747fa..1fe4783 160000 --- a/src/protocol +++ b/src/protocol @@ -1 +1 @@ -Subproject commit d0747faf6860c825e81855e2b58cbc8298084af1 +Subproject commit 1fe4783d940cd8905b3f3cb03884890e887cd0c4