@@ -25,6 +25,7 @@ public WebSocketTransport(IClientWebSocket ws)
2525 public TimeSpan ReceiveWait { get ; set ; }
2626 public Action < string > OnTextReceived { get ; set ; }
2727 public Action < byte [ ] > OnBinaryReceived { get ; set ; }
28+ public Action < Exception > OnAborted { get ; set ; }
2829
2930 readonly IClientWebSocket _ws ;
3031 readonly CancellationTokenSource _listenCancellation ;
@@ -91,61 +92,57 @@ private async Task ListenAsync()
9192 {
9293 break ;
9394 }
94- if ( _ws . State == WebSocketState . Open )
95- {
96- var buffer = new byte [ ReceiveChunkSize ] ;
97- int count = 0 ;
98- WebSocketReceiveResult result = null ;
95+ var buffer = new byte [ ReceiveChunkSize ] ;
96+ int count = 0 ;
97+ WebSocketReceiveResult result = null ;
9998
100- while ( true )
99+ while ( _ws . State == WebSocketState . Open )
100+ {
101+ var subBuffer = new byte [ ReceiveChunkSize ] ;
102+ try
101103 {
102- var subBuffer = new byte [ ReceiveChunkSize ] ;
103- try
104- {
105- result = await _ws . ReceiveAsync ( new ArraySegment < byte > ( subBuffer ) , CancellationToken . None ) . ConfigureAwait ( false ) ;
104+ result = await _ws . ReceiveAsync ( new ArraySegment < byte > ( subBuffer ) , CancellationToken . None ) . ConfigureAwait ( false ) ;
106105
107- // resize
108- if ( buffer . Length - count < result . Count )
109- {
110- Array . Resize ( ref buffer , buffer . Length + result . Count ) ;
111- }
112- Buffer . BlockCopy ( subBuffer , 0 , buffer , count , result . Count ) ;
113- count += result . Count ;
114- if ( result . EndOfMessage )
115- {
116- break ;
117- }
106+ // resize
107+ if ( buffer . Length - count < result . Count )
108+ {
109+ Array . Resize ( ref buffer , buffer . Length + result . Count ) ;
118110 }
119- catch ( Exception e )
111+ Buffer . BlockCopy ( subBuffer , 0 , buffer , count , result . Count ) ;
112+ count += result . Count ;
113+ if ( result . EndOfMessage )
120114 {
121- Debug . WriteLine ( e ) ;
122115 break ;
123116 }
124117 }
125-
126- if ( result != null )
118+ catch ( Exception e )
127119 {
128- switch ( result . MessageType )
129- {
130- case WebSocketMessageType . Text :
131- string text = Encoding . UTF8 . GetString ( buffer , 0 , count ) ;
132- OnTextReceived ( text ) ;
133- break ;
134- case WebSocketMessageType . Binary :
135- byte [ ] bytes = new byte [ count ] ;
136- Buffer . BlockCopy ( buffer , 0 , bytes , 0 , bytes . Length ) ;
137- OnBinaryReceived ( bytes ) ;
138- break ;
139- case WebSocketMessageType . Close :
140- break ;
141- default :
142- break ;
143- }
120+ Debug . WriteLine ( e ) ;
121+ OnAborted ( e ) ;
122+ break ;
144123 }
145124 }
146- else
125+
126+ if ( result == null )
127+ {
128+ break ;
129+ }
130+
131+ switch ( result . MessageType )
147132 {
148- await Task . Delay ( ReceiveWait ) ;
133+ case WebSocketMessageType . Text :
134+ string text = Encoding . UTF8 . GetString ( buffer , 0 , count ) ;
135+ OnTextReceived ( text ) ;
136+ break ;
137+ case WebSocketMessageType . Binary :
138+ byte [ ] bytes = new byte [ count ] ;
139+ Buffer . BlockCopy ( buffer , 0 , bytes , 0 , bytes . Length ) ;
140+ OnBinaryReceived ( bytes ) ;
141+ break ;
142+ case WebSocketMessageType . Close :
143+ break ;
144+ default :
145+ break ;
149146 }
150147 }
151148 }
0 commit comments