11using  System ; 
22using  System . Diagnostics . CodeAnalysis ; 
3+ using  System . IO ; 
34using  System . Net . WebSockets ; 
45using  System . Text ; 
56using  System . Threading ; 
@@ -136,18 +137,16 @@ private static void ScheduleTransportTask(Func<CancellationToken, Task> taskFact
136137        /// Starts listening the socket. 
137138        /// </summary> 
138139        /// <returns>The start.</returns> 
139-         private  async  Task < object >  GetResponseAsync ( CancellationToken  cancellationToken ) 
140+         private  async  Task  GetResponseAsync ( CancellationToken  cancellationToken ) 
140141        { 
141142            var  buffer  =  new  byte [ 2048 ] ; 
142143
143144            while  ( ! IsClosed ) 
144145            { 
145-                 var  endOfMessage  =  false ; 
146-                 var  response  =  new  StringBuilder ( ) ; 
147- 
148-                 while  ( ! endOfMessage ) 
146+                 MemoryStream  memoryStream  =  null ; 
147+                 WebSocketReceiveResult  result ; 
148+                 do 
149149                { 
150-                     WebSocketReceiveResult  result ; 
151150                    try 
152151                    { 
153152                        result  =  await  _client . ReceiveAsync ( 
@@ -156,31 +155,35 @@ private async Task<object> GetResponseAsync(CancellationToken cancellationToken)
156155                    } 
157156                    catch  ( OperationCanceledException ) 
158157                    { 
159-                         return   null ; 
158+                         return ; 
160159                    } 
161160                    catch  ( Exception  ex ) 
162161                    { 
163162                        OnClose ( ex . Message ) ; 
164-                         return   null ; 
163+                         return ; 
165164                    } 
166165
167-                     endOfMessage  =  result . EndOfMessage ; 
168- 
169-                     if  ( result . MessageType  ==  WebSocketMessageType . Text ) 
166+                     if  ( result . MessageType  ==  WebSocketMessageType . Close ) 
170167                    { 
171-                         response . Append ( Encoding . UTF8 . GetString ( buffer ,  0 ,  result . Count ) ) ; 
168+                         OnClose ( "WebSocket closed" ) ; 
169+                         return ; 
172170                    } 
173-                     else  if  ( result . MessageType  ==  WebSocketMessageType . Close ) 
171+                     else  if  ( result . MessageType  ==  WebSocketMessageType . Binary ) 
174172                    { 
175-                         OnClose ( "WebSocket closed" ) ; 
176-                         return  null ; 
173+                         continue ; 
177174                    } 
175+ 
176+                     if  ( memoryStream  is  null  &&  ! result . EndOfMessage ) 
177+                     { 
178+                         memoryStream  =  new  MemoryStream ( buffer . Length ) ; 
179+                     } 
180+ 
181+                     memoryStream ? . Write ( buffer ,  0 ,  result . Count ) ; 
178182                } 
183+                 while  ( ! result . EndOfMessage ) ; 
179184
180-                 MessageReceived ? . Invoke ( this ,  new  MessageReceivedEventArgs ( response . ToString ( ) ) ) ; 
185+                 MessageReceived ? . Invoke ( this ,  new  MessageReceivedEventArgs ( memoryStream   is   null   ?   buffer . AsSpan ( 0 ,   result . Count ) . ToArray ( )   :   memoryStream . ToArray ( ) ) ) ; 
181186            } 
182- 
183-             return  null ; 
184187        } 
185188
186189        private  void  OnClose ( string  closeReason ) 
0 commit comments