diff --git a/src/Client.ts b/src/Client.ts index 2c77701d..49681868 100644 --- a/src/Client.ts +++ b/src/Client.ts @@ -154,6 +154,7 @@ export class Client extends EventEmitter { break; case ConnectionState.Disconnected: this.emit("disconnected"); + setTimeout(() => this.connect(), 10000); break; } }); diff --git a/src/events/client.ts b/src/events/client.ts index 1a091720..bef679db 100644 --- a/src/events/client.ts +++ b/src/events/client.ts @@ -86,6 +86,7 @@ export class EventClient extends EventEmitter< connect(uri: string, token: string) { this.disconnect(); this.setState(ConnectionState.Connecting); + this.#socket = new WebSocket( `${uri}?version=${this.#protocolVersion}&format=${ this.#transportFormat @@ -115,9 +116,13 @@ export class EventClient extends EventEmitter< } }; + let closed = false; this.#socket.onclose = () => { + if (closed) return; + closed = true; + clearInterval(this.#heartbeatIntervalReference); - this.setState(ConnectionState.Disconnected); + this.disconnect(); }; } @@ -126,9 +131,10 @@ export class EventClient extends EventEmitter< */ disconnect() { if (!this.#socket) return; - this.setState(ConnectionState.Disconnected); - this.#socket.close(); + let socket = this.#socket; this.#socket = undefined; + socket.close(); + this.setState(ConnectionState.Disconnected); } /**