@@ -43,6 +43,7 @@ export class Session {
4343 private _baseSession : IBaseSession ;
4444 private _wampSession : WAMPSession ;
4545 private _idGen : SessionScopeIDGenerator = new SessionScopeIDGenerator ( ) ;
46+ private _disconnectCallbacks : Array < ( ) => Promise < void > > = [ ] ;
4647
4748 private _callRequests : Map < number , {
4849 resolve : ( value : Result ) => void ,
@@ -76,6 +77,7 @@ export class Session {
7677 constructor ( baseSession : IBaseSession ) {
7778 this . _baseSession = baseSession ;
7879 this . _wampSession = new WAMPSession ( baseSession . serializer ( ) ) ;
80+ this . _baseSession . onDisconnect ( async ( ) => { await this . markDisconnected ( ) ; } ) ;
7981
8082 ( async ( ) => {
8183 for ( ; ; ) {
@@ -85,6 +87,10 @@ export class Session {
8587 } ) ( ) ;
8688 }
8789
90+ onDisconnect ( callback : ( ) => Promise < void > ) : void {
91+ this . _disconnectCallbacks . push ( callback ) ;
92+ }
93+
8894 private get _nextID ( ) : number {
8995 return this . _idGen . next ( ) ;
9096 }
@@ -234,15 +240,15 @@ export class Session {
234240 throw new ProtocolError ( wampErrorString ( message ) ) ;
235241 }
236242 } else if ( message instanceof Goodbye ) {
237- this . markDisconnected ( )
243+ await this . markDisconnected ( )
238244 } else {
239245 throw new ProtocolError ( `Unexpected message type ${ typeof message } ` ) ;
240246 }
241247 }
242248
243- private markDisconnected ( ) {
244- if ( ! this . isConnected ( ) ) {
245- return
249+ private async markDisconnected ( ) {
250+ if ( this . _disconnectCallbacks . length > 0 ) {
251+ await Promise . all ( this . _disconnectCallbacks . map ( cb => cb ( ) ) ) ;
246252 }
247253
248254 if ( this . _goodbyeRequest && ! this . _goodbyeRequest . isCompleted ) {
0 commit comments