@@ -24,19 +24,22 @@ public class ConnectionManager : IConnectionManager
2424 private readonly IHandshakeStateTransport _initState ;
2525 private readonly ILoggerFactory _loggerFactory ;
2626 private readonly IStreamCompressor _compressor ;
27+ private readonly TransportLifetimeManager _lifetimeManager ;
2728 public ConcurrentDictionary < string , WebSocketTransport > Connections { get ; }
2829
2930 public ConnectionManager ( IStreamCompressor compressor ,
31+ TransportLifetimeManager lifetimeManager ,
3032 InvocatorRegistry invocatorRegistry ,
3133 IOptions < ServerSocketsOptions > options ,
3234 IHandshakeStateTransport initState ,
3335 ILoggerFactory loggerFactory )
3436 {
37+ _compressor = compressor ;
38+ _lifetimeManager = lifetimeManager ;
3539 _invocatorRegistry = invocatorRegistry ;
3640 _options = options . Value ;
3741 _initState = initState ;
38- _loggerFactory = loggerFactory ;
39- _compressor = compressor ;
42+ _loggerFactory = loggerFactory ;
4043 Connections = new ConcurrentDictionary < string , WebSocketTransport > ( StringComparer . OrdinalIgnoreCase ) ;
4144 }
4245
@@ -89,10 +92,18 @@ private async Task SendAsync(WebSocketTransport transport, WebSocketMessageDescr
8992 throw new ArgumentNullException ( nameof ( descriptor . Segments ) ) ;
9093 }
9194
92- await transport . WebSocket . SendAsync ( descriptor . Segments ,
93- descriptor . MessageType ,
94- descriptor . EndOfMessage ,
95- CancellationToken . None ) ;
95+ if ( ! transport . WebSocket . CloseStatus . HasValue )
96+ {
97+ await transport . WebSocket . SendAsync ( descriptor . Segments ,
98+ descriptor . MessageType ,
99+ descriptor . EndOfMessage ,
100+ CancellationToken . None ) ;
101+ }
102+ else
103+ {
104+ // Only text messages
105+ _lifetimeManager . AddQueue ( new MessageHolder { ConnectionId = transport . ConnectionId , Segments = descriptor . Segments } ) ;
106+ }
96107 }
97108
98109 private async Task SendBinaryAsync ( WebSocketTransport transport , byte [ ] chunkedBytes , bool endOfMessage , CancellationToken token )
@@ -104,10 +115,13 @@ private async Task SendBinaryAsync(WebSocketTransport transport, byte[] chunkedB
104115
105116 var segments = new ArraySegment < byte > ( chunkedBytes ) ;
106117
107- await transport . WebSocket . SendAsync ( segments ,
108- WebSocketMessageType . Binary ,
109- endOfMessage ,
110- token ) ;
118+ if ( ! transport . WebSocket . CloseStatus . HasValue )
119+ {
120+ await transport . WebSocket . SendAsync ( segments ,
121+ WebSocketMessageType . Binary ,
122+ endOfMessage ,
123+ token ) ;
124+ }
111125 }
112126
113127 public async Task ConnectAsync ( WebSocket webSocket , string connectorName = "" )
0 commit comments