4
4
using System . Net . Http ;
5
5
using System . Net . WebSockets ;
6
6
using System . Reactive ;
7
- using System . Reactive . Concurrency ;
8
7
using System . Reactive . Disposables ;
9
8
using System . Reactive . Linq ;
10
9
using System . Reactive . Subjects ;
@@ -30,8 +29,6 @@ internal class GraphQLHttpWebSocket : IDisposable
30
29
private readonly BehaviorSubject < GraphQLWebsocketConnectionState > _stateSubject =
31
30
new BehaviorSubject < GraphQLWebsocketConnectionState > ( GraphQLWebsocketConnectionState . Disconnected ) ;
32
31
private readonly IDisposable _requestSubscription ;
33
- private readonly EventLoopScheduler _receiveLoopScheduler = new EventLoopScheduler ( ) ;
34
- private readonly EventLoopScheduler _sendLoopScheduler = new EventLoopScheduler ( ) ;
35
32
36
33
private int _connectionAttempt = 0 ;
37
34
private IConnectableObservable < WebsocketMessageWrapper > _incomingMessages ;
@@ -80,12 +77,10 @@ public GraphQLHttpWebSocket(Uri webSocketUri, GraphQLHttpClient client)
80
77
_client = client ;
81
78
_buffer = new ArraySegment < byte > ( new byte [ 8192 ] ) ;
82
79
IncomingMessageStream = GetMessageStream ( ) ;
83
- _receiveLoopScheduler . Schedule ( ( ) =>
84
- Debug . WriteLine ( $ "receive loop scheduler thread id: { Thread . CurrentThread . ManagedThreadId } ") ) ;
85
80
86
81
_requestSubscription = _requestSubject
87
- . ObserveOn ( _sendLoopScheduler )
88
- . SelectMany ( SendWebSocketRequestAsync )
82
+ . Select ( SendWebSocketRequestAsync )
83
+ . Concat ( )
89
84
. Subscribe ( ) ;
90
85
}
91
86
@@ -436,7 +431,7 @@ private async Task ConnectAsync(CancellationToken token)
436
431
437
432
// create receiving observable
438
433
_incomingMessages = Observable
439
- . Defer ( ( ) => GetReceiveTask ( ) . ToObservable ( ) . ObserveOn ( _receiveLoopScheduler ) )
434
+ . Defer ( ( ) => GetReceiveTask ( ) . ToObservable ( ) )
440
435
. Repeat ( )
441
436
// complete sequence on OperationCanceledException, this is triggered by the cancellation token on disposal
442
437
. Catch < WebsocketMessageWrapper , OperationCanceledException > ( exception => Observable . Empty < WebsocketMessageWrapper > ( ) )
@@ -489,13 +484,13 @@ private Task BackOff()
489
484
}
490
485
491
486
private IObservable < WebsocketMessageWrapper > GetMessageStream ( ) =>
492
- Observable . Using ( ( ) => new EventLoopScheduler ( ) , scheduler =>
493
- Observable . Create < WebsocketMessageWrapper > ( async observer =>
487
+ Observable . Create < WebsocketMessageWrapper > ( async observer =>
494
488
{
495
489
// make sure the websocket is connected
496
490
await InitializeWebSocket ( ) ;
497
491
// subscribe observer to message stream
498
- var subscription = new CompositeDisposable ( _incomingMessages . ObserveOn ( scheduler ) . Subscribe ( observer ) )
492
+ var subscription = new CompositeDisposable ( _incomingMessages
493
+ . Subscribe ( observer ) )
499
494
{
500
495
// register the observer's OnCompleted method with the cancellation token to complete the sequence on disposal
501
496
_internalCancellationTokenSource . Token . Register ( observer . OnCompleted )
@@ -507,7 +502,7 @@ private IObservable<WebsocketMessageWrapper> GetMessageStream() =>
507
502
Debug . WriteLine ( $ "new incoming message subscription { hashCode } created") ;
508
503
509
504
return subscription ;
510
- } ) ) ;
505
+ } ) ;
511
506
512
507
private Task < WebsocketMessageWrapper > _receiveAsyncTask = null ;
513
508
private readonly object _receiveTaskLocker = new object ( ) ;
@@ -634,10 +629,7 @@ private async Task CompleteAsync()
634
629
_exceptionSubject ? . OnCompleted ( ) ;
635
630
_exceptionSubject ? . Dispose ( ) ;
636
631
_internalCancellationTokenSource . Dispose ( ) ;
637
-
638
- _sendLoopScheduler ? . Dispose ( ) ;
639
- _receiveLoopScheduler ? . Dispose ( ) ;
640
-
632
+
641
633
Debug . WriteLine ( "GraphQLHttpWebSocket disposed" ) ;
642
634
}
643
635
0 commit comments