Skip to content

Commit 029e343

Browse files
Add option to wait for complete cleanup of the websocket on close
Signed-off-by: Peter Broadhurst <[email protected]>
1 parent b5c4fc4 commit 029e343

File tree

1 file changed

+7
-4
lines changed

1 file changed

+7
-4
lines changed

lib/websocket.ts

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ export class FireFlyWebSocket {
2626
private readonly logger = new Logger(FireFlyWebSocket.name);
2727

2828
private socket?: WebSocket;
29-
private closed = false;
29+
private closed? = () => {};
3030
private pingTimer?: NodeJS.Timeout;
3131
private disconnectTimer?: NodeJS.Timeout;
3232
private reconnectTimer?: NodeJS.Timeout;
@@ -61,7 +61,7 @@ export class FireFlyWebSocket {
6161
auth,
6262
handshakeTimeout: this.options.heartbeatInterval,
6363
}));
64-
this.closed = false;
64+
this.closed = undefined;
6565

6666
socket
6767
.on('open', () => {
@@ -177,15 +177,18 @@ export class FireFlyWebSocket {
177177
}
178178
}
179179

180-
close() {
181-
this.closed = true;
180+
async close(wait?: boolean): Promise<void> {
181+
const closedPromise = new Promise<void>(resolve => {
182+
this.closed = resolve;
183+
});
182184
this.clearPingTimers();
183185
if (this.socket) {
184186
try {
185187
this.socket.close();
186188
} catch (e: any) {
187189
this.logger.warn(`Failed to clean up websocket: ${e.message}`);
188190
}
191+
if (wait) await closedPromise;
189192
this.socket = undefined;
190193
}
191194
}

0 commit comments

Comments
 (0)