Skip to content

Commit 47b4abf

Browse files
authored
Merge pull request #240 from graphql-dotnet/fix-websocket-send-queue
Fix websocket send queue
2 parents fb657d5 + 059b32b commit 47b4abf

File tree

4 files changed

+19
-8
lines changed

4 files changed

+19
-8
lines changed

src/GraphQL.Client.LocalExecution/GraphQLLocalExecutionClient.cs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -79,8 +79,11 @@ private async Task<GraphQLResponse<TResponse>> ExecuteQueryAsync<TResponse>(Grap
7979
private async Task<IObservable<GraphQLResponse<TResponse>>> ExecuteSubscriptionAsync<TResponse>(GraphQLRequest request, CancellationToken cancellationToken = default)
8080
{
8181
var result = await ExecuteAsync(request, cancellationToken);
82-
return ((SubscriptionExecutionResult)result).Streams?.Values.SingleOrDefault()?
83-
.SelectMany(executionResult => Observable.FromAsync(token => ExecutionResultToGraphQLResponse<TResponse>(executionResult, token)));
82+
var stream = ((SubscriptionExecutionResult)result).Streams?.Values.SingleOrDefault();
83+
84+
return stream == null
85+
? Observable.Throw<GraphQLResponse<TResponse>>(new InvalidOperationException("the GraphQL execution did not return an observable"))
86+
: stream.SelectMany(executionResult => Observable.FromAsync(token => ExecutionResultToGraphQLResponse<TResponse>(executionResult, token)));
8487
}
8588

8689
private async Task<ExecutionResult> ExecuteAsync(GraphQLRequest request, CancellationToken cancellationToken = default)

src/GraphQL.Client/GraphQLHttpClient.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,9 @@
22
using System.Collections.Concurrent;
33
using System.Diagnostics;
44
using System.IO;
5+
using System.Linq;
56
using System.Net.Http;
7+
using System.Net.Http.Headers;
68
using System.Threading;
79
using System.Threading.Tasks;
810
using GraphQL.Client.Abstractions;
@@ -57,6 +59,10 @@ public GraphQLHttpClient(GraphQLHttpClientOptions options, IGraphQLWebsocketJson
5759
Options = options ?? throw new ArgumentNullException(nameof(options));
5860
JsonSerializer = serializer ?? throw new ArgumentNullException(nameof(serializer), "please configure the JSON serializer you want to use");
5961
HttpClient = httpClient ?? throw new ArgumentNullException(nameof(httpClient));
62+
63+
if (!HttpClient.DefaultRequestHeaders.UserAgent.Any())
64+
HttpClient.DefaultRequestHeaders.UserAgent.Add(new ProductInfoHeaderValue(GetType().Assembly.GetName().Name, GetType().Assembly.GetName().Version.ToString()));
65+
6066
_graphQlHttpWebSocket = new GraphQLHttpWebSocket(GetWebSocketUri(), this);
6167
}
6268

src/GraphQL.Client/Websocket/GraphQLHttpWebSocket.cs

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
using System.IO;
44
using System.Net.Http;
55
using System.Net.WebSockets;
6+
using System.Reactive;
67
using System.Reactive.Concurrency;
78
using System.Reactive.Disposables;
89
using System.Reactive.Linq;
@@ -84,7 +85,8 @@ public GraphQLHttpWebSocket(Uri webSocketUri, GraphQLHttpClient client)
8485

8586
_requestSubscription = _requestSubject
8687
.ObserveOn(_sendLoopScheduler)
87-
.Subscribe(async request => await SendWebSocketRequestAsync(request));
88+
.SelectMany(SendWebSocketRequestAsync)
89+
.Subscribe();
8890
}
8991

9092
#region Send requests
@@ -339,14 +341,14 @@ private Task QueueWebSocketRequest(GraphQLWebSocketRequest request)
339341
return request.SendTask();
340342
}
341343

342-
private async Task SendWebSocketRequestAsync(GraphQLWebSocketRequest request)
344+
private async Task<Unit> SendWebSocketRequestAsync(GraphQLWebSocketRequest request)
343345
{
344346
try
345347
{
346348
if (_internalCancellationToken.IsCancellationRequested)
347349
{
348350
request.SendCanceled();
349-
return;
351+
return Unit.Default;
350352
}
351353

352354
await InitializeWebSocket();
@@ -362,6 +364,7 @@ await _clientWebSocket.SendAsync(
362364
{
363365
request.SendFailed(e);
364366
}
367+
return Unit.Default;
365368
}
366369

367370
#endregion

src/src.props

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,8 @@
77
<LangVersion>8.0</LangVersion>
88
</PropertyGroup>
99

10-
<!--TODO: remove condition when https://github.com/GitTools/GitVersion/issues/2063 is fixed-->
11-
<ItemGroup Condition=" '$(DEBUG)' != ''">
12-
<PackageReference Update="GitVersionTask" Version="5.2.4">
10+
<ItemGroup>
11+
<PackageReference Update="GitVersionTask" Version="5.3.4">
1312
<PrivateAssets>all</PrivateAssets>
1413
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
1514
</PackageReference>

0 commit comments

Comments
 (0)