@@ -98,16 +98,28 @@ public WebSocket(IWindow window, String url, params String[] protocols)
98
98
throw new DomException ( DomError . Syntax ) ;
99
99
100
100
_ws = new ClientWebSocket ( ) ;
101
+
102
+ foreach ( var protocol in protocols )
103
+ _ws . Options . AddSubProtocol ( protocol ) ;
104
+
101
105
_ws . Options . KeepAliveInterval = TimeSpan . FromSeconds ( 20 ) ;
102
106
ConnectAsync ( url ) . Forget ( ) ;
103
107
}
104
108
105
109
async Task ConnectAsync ( String url )
106
110
{
107
- await _ws . ConnectAsync ( new Uri ( url ) , _cts . Token ) . ConfigureAwait ( false ) ;
108
- _state = WebSocketReadyState . Open ;
109
- OnConnected ( ) ;
110
- ListenAsync ( ) . Forget ( ) ;
111
+ try
112
+ {
113
+ await _ws . ConnectAsync ( new Uri ( url ) , _cts . Token ) . ConfigureAwait ( false ) ;
114
+ _state = WebSocketReadyState . Open ;
115
+ OnConnected ( ) ;
116
+ ListenAsync ( ) . Forget ( ) ;
117
+ }
118
+ catch ( Exception ex )
119
+ {
120
+ _state = WebSocketReadyState . Closed ;
121
+ OnError ( ex ) ;
122
+ }
111
123
}
112
124
113
125
#endregion
@@ -249,7 +261,10 @@ async Task ListenAsync()
249
261
var result = await _ws . ReceiveAsync ( segment , _cts . Token ) . ConfigureAwait ( false ) ;
250
262
251
263
if ( result . MessageType == WebSocketMessageType . Close )
264
+ {
265
+ await CloseAsync ( ) . ConfigureAwait ( false ) ;
252
266
break ;
267
+ }
253
268
254
269
stringResult . Append ( Encoding . UTF8 . GetString ( buffer , 0 , result . Count ) ) ;
255
270
@@ -259,8 +274,6 @@ async Task ListenAsync()
259
274
stringResult . Clear ( ) ;
260
275
}
261
276
}
262
-
263
- await CloseAsync ( ) . ConfigureAwait ( false ) ;
264
277
}
265
278
catch ( Exception ex )
266
279
{
0 commit comments