From 7947d7fd187bfbfca47525c32c3136c4bd69b2b6 Mon Sep 17 00:00:00 2001 From: Joel Rowley Date: Mon, 3 Jan 2022 17:19:50 -0500 Subject: [PATCH] feat: Add getter for determining if WebSocket is connected (#656) --- src/client/WebSocketClient.test.ts | 38 ++++++++++++++++++++++++++++++ src/client/WebSocketClient.ts | 9 +++++++ 2 files changed, 47 insertions(+) diff --git a/src/client/WebSocketClient.test.ts b/src/client/WebSocketClient.test.ts index 1e5f8d6c..26405545 100644 --- a/src/client/WebSocketClient.test.ts +++ b/src/client/WebSocketClient.test.ts @@ -84,6 +84,44 @@ describe('WebSocketClient', () => { }); }); + describe('connected', () => { + it('returns false when called before the connection is created', done => { + const ws = createWebSocketClient(); + expect(ws.connected).toBe(false); + done(); + }); + it('returns true when called after the connection is created', done => { + const ws = createWebSocketClient(); + + ws.on(WebSocketEvent.ON_CLOSE, () => { + done(); + }); + + ws.on(WebSocketEvent.ON_OPEN, () => { + expect(ws.connected).toBe(true); + + ws.disconnect(); + }); + + ws.connect(); + }); + + it('returns false when called after the connection is closed', done => { + const ws = createWebSocketClient(); + + ws.on(WebSocketEvent.ON_CLOSE, () => { + expect(ws.connected).toBe(false); + done(); + }); + + ws.on(WebSocketEvent.ON_OPEN, () => { + ws.disconnect(); + }); + + ws.connect(); + }); + }); + describe('constructor', () => { it('it signals an event when the WebSocket connection is established', done => { const ws = createWebSocketClient(); diff --git a/src/client/WebSocketClient.ts b/src/client/WebSocketClient.ts index 934e53d3..92284677 100644 --- a/src/client/WebSocketClient.ts +++ b/src/client/WebSocketClient.ts @@ -471,6 +471,15 @@ export class WebSocketClient extends EventEmitter { } } + /** + * A simple function to determine if the websocket appears to be open. + * + * @returns True if the websocket has been opened and has not closed. + */ + get connected(): boolean { + return undefined !== this.socket; + } + async sendMessage(message: WebSocketRequest): Promise { if (!this.socket) { throw new Error(`Failed to send message of type "${message.type}": You need to connect to the WebSocket first.`);