11using System ;
22using System . Diagnostics . CodeAnalysis ;
3+ using System . IO ;
34using System . Net . WebSockets ;
45using System . Text ;
56using System . Threading ;
@@ -138,18 +139,16 @@ private static void ScheduleTransportTask(Func<CancellationToken, Task> taskFact
138139 /// Starts listening the socket.
139140 /// </summary>
140141 /// <returns>The start.</returns>
141- private async Task < object > GetResponseAsync ( CancellationToken cancellationToken )
142+ private async Task GetResponseAsync ( CancellationToken cancellationToken )
142143 {
143144 var buffer = new byte [ 2048 ] ;
144145
145146 while ( ! IsClosed )
146147 {
147- var endOfMessage = false ;
148- var response = new StringBuilder ( ) ;
149-
150- while ( ! endOfMessage )
148+ MemoryStream memoryStream = null ;
149+ WebSocketReceiveResult result ;
150+ do
151151 {
152- WebSocketReceiveResult result ;
153152 try
154153 {
155154 result = await _client . ReceiveAsync (
@@ -158,31 +157,35 @@ private async Task<object> GetResponseAsync(CancellationToken cancellationToken)
158157 }
159158 catch ( OperationCanceledException )
160159 {
161- return null ;
160+ return ;
162161 }
163162 catch ( Exception ex )
164163 {
165164 OnClose ( ex . Message ) ;
166- return null ;
165+ return ;
167166 }
168167
169- endOfMessage = result . EndOfMessage ;
170-
171- if ( result . MessageType == WebSocketMessageType . Text )
168+ if ( result . MessageType == WebSocketMessageType . Close )
172169 {
173- response . Append ( Encoding . UTF8 . GetString ( buffer , 0 , result . Count ) ) ;
170+ OnClose ( "WebSocket closed" ) ;
171+ return ;
174172 }
175- else if ( result . MessageType == WebSocketMessageType . Close )
173+ else if ( result . MessageType == WebSocketMessageType . Binary )
176174 {
177- OnClose ( "WebSocket closed" ) ;
178- return null ;
175+ continue ;
179176 }
177+
178+ if ( memoryStream is null && ! result . EndOfMessage )
179+ {
180+ memoryStream = new MemoryStream ( buffer . Length ) ;
181+ }
182+
183+ memoryStream ? . Write ( buffer , 0 , result . Count ) ;
180184 }
185+ while ( ! result . EndOfMessage ) ;
181186
182- MessageReceived ? . Invoke ( this , new MessageReceivedEventArgs ( response . ToString ( ) ) ) ;
187+ MessageReceived ? . Invoke ( this , new MessageReceivedEventArgs ( memoryStream is null ? buffer . AsSpan ( 0 , result . Count ) . ToArray ( ) : memoryStream . ToArray ( ) ) ) ;
183188 }
184-
185- return null ;
186189 }
187190
188191 private void OnClose ( string closeReason )
0 commit comments