@@ -16,6 +16,7 @@ export class WsHost extends BaseHost {
1616
1717export class WsServerHost extends BaseHost implements IDisposable {
1818 private socketToEnvId = new Map < string , { socket : io . Socket ; clientID : string } > ( ) ;
19+ private clientIdToSocket = new Map < string , io . Socket > ( ) ;
1920 private disposables = new SafeDisposable ( WsServerHost . name ) ;
2021 dispose = this . disposables . dispose ;
2122 isDisposed = this . disposables . isDisposed ;
@@ -42,7 +43,17 @@ export class WsServerHost extends BaseHost implements IDisposable {
4243 }
4344
4445 private onConnection = ( socket : io . Socket ) : void => {
45- const nameSpace = ( original : string ) => `${ socket . id } /${ original } ` ;
46+ const clientId = socket . handshake . auth ?. clientId || socket . id ;
47+
48+ // disconnect previous connection
49+ const existingSocket = this . clientIdToSocket . get ( clientId ) ;
50+ if ( existingSocket && existingSocket . connected ) {
51+ existingSocket . disconnect ( true ) ;
52+ }
53+
54+ this . clientIdToSocket . set ( clientId , socket ) ;
55+
56+ const nameSpace = ( original : string ) => `${ clientId } /${ original } ` ;
4657 const onMessage = ( message : Message ) : void => {
4758 // this mapping should not be here because of forwarding of messages
4859 // maybe change message forwarding to have 'forward destination' and correct 'from'
@@ -74,6 +85,9 @@ export class WsServerHost extends BaseHost implements IDisposable {
7485 } ) ;
7586 }
7687 }
88+ if ( this . clientIdToSocket . get ( clientId ) === socket ) {
89+ this . clientIdToSocket . delete ( clientId ) ;
90+ }
7791 } ) ;
7892 } ;
7993}
0 commit comments