@@ -26,7 +26,7 @@ export class FireFlyWebSocket {
26
26
private readonly logger = new Logger ( FireFlyWebSocket . name ) ;
27
27
28
28
private socket ?: WebSocket ;
29
- private closed = false ;
29
+ private closed ? = ( ) => { } ;
30
30
private pingTimer ?: NodeJS . Timeout ;
31
31
private disconnectTimer ?: NodeJS . Timeout ;
32
32
private reconnectTimer ?: NodeJS . Timeout ;
@@ -61,7 +61,7 @@ export class FireFlyWebSocket {
61
61
auth,
62
62
handshakeTimeout : this . options . heartbeatInterval ,
63
63
} ) ) ;
64
- this . closed = false ;
64
+ this . closed = undefined ;
65
65
66
66
socket
67
67
. on ( 'open' , ( ) => {
@@ -83,13 +83,17 @@ export class FireFlyWebSocket {
83
83
) ;
84
84
this . logger . log ( `Started listening on subscription ${ this . options . namespace } :${ name } ` ) ;
85
85
}
86
+ if ( this . options ?. afterConnect !== undefined ) {
87
+ this . options . afterConnect ( this ) ;
88
+ }
86
89
} )
87
90
. on ( 'error' , ( err ) => {
88
91
this . logger . error ( 'Error' , err . stack ) ;
89
92
} )
90
93
. on ( 'close' , ( ) => {
91
94
if ( this . closed ) {
92
95
this . logger . log ( 'Closed' ) ;
96
+ this . closed ( ) ; // do this after all logging
93
97
} else {
94
98
this . disconnectDetected = true ;
95
99
this . reconnect ( 'Closed by peer' ) ;
@@ -156,6 +160,12 @@ export class FireFlyWebSocket {
156
160
}
157
161
}
158
162
163
+ send ( json : JSON ) {
164
+ if ( this . socket !== undefined ) {
165
+ this . socket . send ( JSON . stringify ( json ) ) ;
166
+ }
167
+ }
168
+
159
169
ack ( event : FireFlyEventDelivery ) {
160
170
if ( this . socket !== undefined && event . id !== undefined ) {
161
171
this . socket . send (
@@ -168,15 +178,18 @@ export class FireFlyWebSocket {
168
178
}
169
179
}
170
180
171
- close ( ) {
172
- this . closed = true ;
181
+ async close ( wait ?: boolean ) : Promise < void > {
182
+ const closedPromise = new Promise < void > ( resolve => {
183
+ this . closed = resolve ;
184
+ } ) ;
173
185
this . clearPingTimers ( ) ;
174
186
if ( this . socket ) {
175
187
try {
176
188
this . socket . close ( ) ;
177
189
} catch ( e : any ) {
178
190
this . logger . warn ( `Failed to clean up websocket: ${ e . message } ` ) ;
179
191
}
192
+ if ( wait ) await closedPromise ;
180
193
this . socket = undefined ;
181
194
}
182
195
}
0 commit comments