44using System . Net . Http ;
55using System . Net . WebSockets ;
66using System . Reactive ;
7- using System . Reactive . Concurrency ;
87using System . Reactive . Disposables ;
98using System . Reactive . Linq ;
109using System . Reactive . Subjects ;
@@ -30,8 +29,6 @@ internal class GraphQLHttpWebSocket : IDisposable
3029 private readonly BehaviorSubject < GraphQLWebsocketConnectionState > _stateSubject =
3130 new BehaviorSubject < GraphQLWebsocketConnectionState > ( GraphQLWebsocketConnectionState . Disconnected ) ;
3231 private readonly IDisposable _requestSubscription ;
33- private readonly EventLoopScheduler _receiveLoopScheduler = new EventLoopScheduler ( ) ;
34- private readonly EventLoopScheduler _sendLoopScheduler = new EventLoopScheduler ( ) ;
3532
3633 private int _connectionAttempt = 0 ;
3734 private IConnectableObservable < WebsocketMessageWrapper > _incomingMessages ;
@@ -80,12 +77,10 @@ public GraphQLHttpWebSocket(Uri webSocketUri, GraphQLHttpClient client)
8077 _client = client ;
8178 _buffer = new ArraySegment < byte > ( new byte [ 8192 ] ) ;
8279 IncomingMessageStream = GetMessageStream ( ) ;
83- _receiveLoopScheduler . Schedule ( ( ) =>
84- Debug . WriteLine ( $ "receive loop scheduler thread id: { Thread . CurrentThread . ManagedThreadId } ") ) ;
8580
8681 _requestSubscription = _requestSubject
87- . ObserveOn ( _sendLoopScheduler )
88- . SelectMany ( SendWebSocketRequestAsync )
82+ . Select ( SendWebSocketRequestAsync )
83+ . Concat ( )
8984 . Subscribe ( ) ;
9085 }
9186
@@ -436,7 +431,7 @@ private async Task ConnectAsync(CancellationToken token)
436431
437432 // create receiving observable
438433 _incomingMessages = Observable
439- . Defer ( ( ) => GetReceiveTask ( ) . ToObservable ( ) . ObserveOn ( _receiveLoopScheduler ) )
434+ . Defer ( ( ) => GetReceiveTask ( ) . ToObservable ( ) )
440435 . Repeat ( )
441436 // complete sequence on OperationCanceledException, this is triggered by the cancellation token on disposal
442437 . Catch < WebsocketMessageWrapper , OperationCanceledException > ( exception => Observable . Empty < WebsocketMessageWrapper > ( ) )
@@ -489,13 +484,13 @@ private Task BackOff()
489484 }
490485
491486 private IObservable < WebsocketMessageWrapper > GetMessageStream ( ) =>
492- Observable . Using ( ( ) => new EventLoopScheduler ( ) , scheduler =>
493- Observable . Create < WebsocketMessageWrapper > ( async observer =>
487+ Observable . Create < WebsocketMessageWrapper > ( async observer =>
494488 {
495489 // make sure the websocket is connected
496490 await InitializeWebSocket ( ) ;
497491 // subscribe observer to message stream
498- var subscription = new CompositeDisposable ( _incomingMessages . ObserveOn ( scheduler ) . Subscribe ( observer ) )
492+ var subscription = new CompositeDisposable ( _incomingMessages
493+ . Subscribe ( observer ) )
499494 {
500495 // register the observer's OnCompleted method with the cancellation token to complete the sequence on disposal
501496 _internalCancellationTokenSource . Token . Register ( observer . OnCompleted )
@@ -507,7 +502,7 @@ private IObservable<WebsocketMessageWrapper> GetMessageStream() =>
507502 Debug . WriteLine ( $ "new incoming message subscription { hashCode } created") ;
508503
509504 return subscription ;
510- } ) ) ;
505+ } ) ;
511506
512507 private Task < WebsocketMessageWrapper > _receiveAsyncTask = null ;
513508 private readonly object _receiveTaskLocker = new object ( ) ;
@@ -634,10 +629,7 @@ private async Task CompleteAsync()
634629 _exceptionSubject ? . OnCompleted ( ) ;
635630 _exceptionSubject ? . Dispose ( ) ;
636631 _internalCancellationTokenSource . Dispose ( ) ;
637-
638- _sendLoopScheduler ? . Dispose ( ) ;
639- _receiveLoopScheduler ? . Dispose ( ) ;
640-
632+
641633 Debug . WriteLine ( "GraphQLHttpWebSocket disposed" ) ;
642634 }
643635
0 commit comments