11using SocketIOClient . ConnectInterval ;
22using SocketIOClient . EioHandler ;
33using SocketIOClient . EventArguments ;
4+ using SocketIOClient . Exceptions ;
45using SocketIOClient . JsonSerializer ;
56using SocketIOClient . Response ;
67using SocketIOClient . WebSocketClient ;
@@ -112,6 +113,8 @@ public Uri ServerUri
112113
113114 public IJsonSerializer JsonSerializer { get ; set ; }
114115
116+ static readonly SemaphoreSlim _semaphoreSlim = new SemaphoreSlim ( 1 , 1 ) ;
117+
115118 #region Socket.IO event
116119 public event EventHandler OnConnected ;
117120 //public event EventHandler<string> OnConnectError;
@@ -299,15 +302,27 @@ private async Task EmityCoreAsync(string eventName, int packetId, string data, C
299302 }
300303 builder . Append ( ']' ) ;
301304 string message = builder . ToString ( ) ;
302- await Socket . SendMessageAsync ( message , cancellationToken ) ;
303- if ( OutGoingBytes . Count > 0 )
305+ try
304306 {
305- foreach ( var item in OutGoingBytes )
307+ await Socket . SendMessageAsync ( message , cancellationToken ) ;
308+ if ( OutGoingBytes . Count > 0 )
306309 {
307- await Socket . SendMessageAsync ( item , cancellationToken ) ;
310+ foreach ( var item in OutGoingBytes )
311+ {
312+ await Socket . SendMessageAsync ( item , cancellationToken ) ;
313+ }
314+ OutGoingBytes . Clear ( ) ;
308315 }
309- OutGoingBytes . Clear ( ) ;
310316 }
317+ catch ( System . Net . WebSockets . WebSocketException e )
318+ {
319+ this . InvokeDisconnect ( e . Message ) ;
320+ }
321+ catch ( InvalidSocketStateException e )
322+ {
323+ this . InvokeDisconnect ( e . Message ) ;
324+ }
325+
311326 }
312327
313328 internal async Task EmitCallbackAsync ( int packetId , params object [ ] data )
@@ -364,8 +379,16 @@ public async Task EmitAsync(string eventName, params object[] data)
364379
365380 public async Task EmitAsync ( string eventName , CancellationToken cancellationToken , params object [ ] data )
366381 {
367- string dataString = GetDataString ( data ) ;
368- await EmityCoreAsync ( eventName , - 1 , dataString , cancellationToken ) ;
382+ await _semaphoreSlim . WaitAsync ( ) ;
383+ try
384+ {
385+ string dataString = GetDataString ( data ) ;
386+ await EmityCoreAsync ( eventName , - 1 , dataString , cancellationToken ) ;
387+ }
388+ finally
389+ {
390+ _semaphoreSlim . Release ( ) ;
391+ }
369392 }
370393
371394 /// <summary>
@@ -382,9 +405,17 @@ public async Task EmitAsync(string eventName, Action<SocketIOResponse> ack, para
382405
383406 public async Task EmitAsync ( string eventName , CancellationToken cancellationToken , Action < SocketIOResponse > ack , params object [ ] data )
384407 {
385- Acks . Add ( ++ PacketId , ack ) ;
386- string dataString = GetDataString ( data ) ;
387- await EmityCoreAsync ( eventName , PacketId , dataString , cancellationToken ) ;
408+ await _semaphoreSlim . WaitAsync ( ) ;
409+ try
410+ {
411+ Acks . Add ( ++ PacketId , ack ) ;
412+ string dataString = GetDataString ( data ) ;
413+ await EmityCoreAsync ( eventName , PacketId , dataString , cancellationToken ) ;
414+ }
415+ finally
416+ {
417+ _semaphoreSlim . Release ( ) ;
418+ }
388419 }
389420
390421 internal void Open ( OpenResponse openResponse )
0 commit comments