Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
58 commits
Select commit Hold shift + click to select a range
041f327
Observable Subscriptions (#80)
rose-a Nov 20, 2018
546b304
add StringEnumConverter to JsonSerializerSettings
rose-a Nov 29, 2018
a8cff74
fix dependencies
rose-a Nov 29, 2018
3b51211
Merge branch 'serialize-enums-to-string-by-default' into subscription…
rose-a Nov 29, 2018
e3a2154
change version
rose-a Nov 29, 2018
eca5d24
fix version
rose-a Nov 29, 2018
2911345
fix CloseAsync
rose-a Dec 3, 2018
af78196
lock dispose
rose-a Dec 3, 2018
43cb3dd
implement external exception handling for subscription streams
rose-a Dec 4, 2018
f1deb7f
fix doc comment
rose-a Dec 4, 2018
1a28d69
add back-off delay for automatic reconnects
rose-a Dec 4, 2018
7b19ab5
create GraphQLHttpWebSocket class
rose-a Dec 4, 2018
ad2c31f
get single socket working
rose-a Dec 4, 2018
ae491f2
fix subscription test, cleanup code
rose-a Dec 5, 2018
98190e9
more code cleanup
rose-a Dec 5, 2018
9aec685
add test CanConnectMultipleSubscriptionsSimultaneously
rose-a Dec 5, 2018
24be6a5
dynamically find free ports for integration test
rose-a Dec 5, 2018
4189799
add WebSocketExceptionHandler to clientOptions
rose-a Dec 5, 2018
492c440
move reconnect-logic into subscriptions
rose-a Dec 7, 2018
293c351
move external exception handler declaration to CreateSubscriptionStre…
rose-a Dec 7, 2018
e6c469a
fix exception on disposing disconnected subscription
rose-a Dec 7, 2018
7bcf0e4
fix tests, add console app for testing reconnect after server restart
rose-a Dec 10, 2018
424f561
Use single websocket for all subscriptions (#84)
rose-a Dec 11, 2018
e91851e
Merge branch 'master' into subscriptions-api
Dec 11, 2018
a4c7e60
Merge branch 'subscriptions-api' of github.com:graphql-dotnet/graphql…
rose-a Dec 18, 2018
16a9bd8
create "queue" for requests so that only one send operation is perfor…
rose-a Dec 18, 2018
c37fe83
fix websockets on win 7
rose-a Dec 18, 2018
0562eb8
remove websockets4net dependency
rose-a Dec 18, 2018
1add607
mrege from upstream/master
rose-a Jan 22, 2019
bd9bf5e
fix suff for dotnet core 3.0
rose-a Jan 22, 2019
72ba90d
check response for 'null' in where clause
rose-a Jan 22, 2019
f8e1865
add obsolete parameterless constructor to GraphQLRequest
rose-a Jan 22, 2019
632a45d
add debug output in websocket receive
rose-a Jan 22, 2019
f8021af
reuse observables for identical requests
rose-a Jan 22, 2019
95d3319
store changes to consoleapp
rose-a Jan 23, 2019
abd9caf
fix StackOverflowException in GraphQLRequest.GetHashCode()
rose-a Jan 23, 2019
6ab3205
mrege fix-gethashcode
rose-a Jan 23, 2019
93fae18
fix receiving long messages via websocket
rose-a Jan 24, 2019
34db7a4
add obsolete constructor
rose-a Jan 24, 2019
ca4216d
make ReceiveResultStream observable Hot
rose-a Jan 25, 2019
acb36a1
fix multiple subscriptions by using subject in GraphQLHttpWebSocket
rose-a Jan 25, 2019
e70f7a4
fix overlapping subscriptions
rose-a Jan 25, 2019
2fbd83d
fix subscription test to work arround https://github.com/graphql-dotn…
rose-a Jan 28, 2019
e1ba20a
add an observable which publishes all websocket exceptions
rose-a Jan 28, 2019
7984248
fix OnNext calls of exceptionSubject
rose-a Jan 28, 2019
ef37543
fix GraphQLHttpClient(Uri endPoint, GraphQLHttpClientOptions options)…
rose-a Jan 28, 2019
309a8e3
test requests via websockets
rose-a Jan 28, 2019
b9c1443
bump pre-release version
rose-a Jan 28, 2019
3ee031a
Subscriptions API (#92)
rose-a Jan 29, 2019
535e1e0
Merge branch 'subscriptions-api' of github.com:graphql-dotnet/graphql…
rose-a Feb 1, 2019
b5bba65
Fix concurrent subscriptions (#94)
rose-a Feb 11, 2019
30bd0b8
Merge branch 'subscriptions-api' of github.com:graphql-dotnet/graphql…
rose-a Feb 14, 2019
93cd370
Fix json converter in websocket (#99)
rose-a Mar 7, 2019
88c2a42
Merge branch 'subscriptions-api' of github.com:graphql-dotnet/graphql…
rose-a Mar 28, 2019
c22ee91
merge master into subscriptions-api
rose-a Mar 28, 2019
fd6b8c3
create configurable preprocessing method for GraphQLRequests
rose-a Apr 1, 2019
13cfa08
make preprocessing func return a task, fix preprocessing of subscript…
rose-a Apr 1, 2019
1b287b8
make PreprocessRequest a property
rose-a Apr 1, 2019
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 22 additions & 1 deletion GraphQL.Client.sln
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@


Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 16
VisualStudioVersion = 16.0.28407.52
Expand Down Expand Up @@ -49,6 +49,12 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "benchmarks", "benchmarks",
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GraphQL.Common.Benchmark", "benchmarks\GraphQL.Common.Benchmark\GraphQL.Common.Benchmark.csproj", "{6A935C7C-7DD1-489D-9259-56C1A398D643}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "GraphQL.Integration.Tests", "tests\GraphQL.Integration.Tests\GraphQL.Integration.Tests.csproj", "{86BC3878-6549-4EF1-9672-B7C15A3FDF46}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IntegrationTestServer", "tests\IntegrationTestServer\IntegrationTestServer.csproj", "{618653E5-41C2-4F17-BE4F-F904267500D4}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SubscriptionIntegrationTest.ConsoleClient", "SubscriptionIntegrationTest.ConsoleClient\SubscriptionIntegrationTest.ConsoleClient.csproj", "{D588BC10-6B17-477F-9546-F8D1CE02EACB}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Expand All @@ -75,6 +81,18 @@ Global
{B21E97C3-F328-473F-A054-A4BF272B63F0}.Debug|Any CPU.Build.0 = Debug|Any CPU
{B21E97C3-F328-473F-A054-A4BF272B63F0}.Release|Any CPU.ActiveCfg = Release|Any CPU
{B21E97C3-F328-473F-A054-A4BF272B63F0}.Release|Any CPU.Build.0 = Release|Any CPU
{86BC3878-6549-4EF1-9672-B7C15A3FDF46}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{86BC3878-6549-4EF1-9672-B7C15A3FDF46}.Debug|Any CPU.Build.0 = Debug|Any CPU
{86BC3878-6549-4EF1-9672-B7C15A3FDF46}.Release|Any CPU.ActiveCfg = Release|Any CPU
{86BC3878-6549-4EF1-9672-B7C15A3FDF46}.Release|Any CPU.Build.0 = Release|Any CPU
{618653E5-41C2-4F17-BE4F-F904267500D4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{618653E5-41C2-4F17-BE4F-F904267500D4}.Debug|Any CPU.Build.0 = Debug|Any CPU
{618653E5-41C2-4F17-BE4F-F904267500D4}.Release|Any CPU.ActiveCfg = Release|Any CPU
{618653E5-41C2-4F17-BE4F-F904267500D4}.Release|Any CPU.Build.0 = Release|Any CPU
{D588BC10-6B17-477F-9546-F8D1CE02EACB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{D588BC10-6B17-477F-9546-F8D1CE02EACB}.Debug|Any CPU.Build.0 = Debug|Any CPU
{D588BC10-6B17-477F-9546-F8D1CE02EACB}.Release|Any CPU.ActiveCfg = Release|Any CPU
{D588BC10-6B17-477F-9546-F8D1CE02EACB}.Release|Any CPU.Build.0 = Release|Any CPU
{6A935C7C-7DD1-489D-9259-56C1A398D643}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{6A935C7C-7DD1-489D-9259-56C1A398D643}.Debug|Any CPU.Build.0 = Debug|Any CPU
{6A935C7C-7DD1-489D-9259-56C1A398D643}.Release|Any CPU.ActiveCfg = Release|Any CPU
Expand All @@ -91,6 +109,9 @@ Global
{6326E0E2-3F48-4BAF-80D3-47AED5EB647C} = {63F75859-4698-4EDE-8B70-4ACBB8BC425A}
{C1406F03-650F-4633-887D-312943251919} = {63F75859-4698-4EDE-8B70-4ACBB8BC425A}
{B21E97C3-F328-473F-A054-A4BF272B63F0} = {9413EC62-CDDE-4E77-9784-E1136EA5D1EE}
{86BC3878-6549-4EF1-9672-B7C15A3FDF46} = {0B0EDB0F-FF67-4B78-A8DB-B5C23E1FEE8C}
{618653E5-41C2-4F17-BE4F-F904267500D4} = {0B0EDB0F-FF67-4B78-A8DB-B5C23E1FEE8C}
{D588BC10-6B17-477F-9546-F8D1CE02EACB} = {0B0EDB0F-FF67-4B78-A8DB-B5C23E1FEE8C}
{6A935C7C-7DD1-489D-9259-56C1A398D643} = {A2E950A3-BD50-40C0-8189-57B455FFBC62}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
Expand Down
135 changes: 135 additions & 0 deletions SubscriptionIntegrationTest.ConsoleClient/Program.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,135 @@
using System;
using System.Net.WebSockets;
using System.Reactive.Disposables;
using System.Reactive.Linq;
using System.Threading.Tasks;
using GraphQL.Client.Http;
using GraphQL.Common.Request;

namespace SubsccriptionIntegrationTest.ConsoleClient
{
class Program
{
static async Task Main(string[] args)
{
Console.WriteLine("configuring client ...");
using (var client = new GraphQLHttpClient("http://localhost:5000/graphql/", new GraphQLHttpClientOptions{ UseWebSocketForQueriesAndMutations = true }))
{

Console.WriteLine("subscribing to message stream ...");

var subscriptions = new CompositeDisposable();

subscriptions.Add(client.WebSocketReceiveErrors.Subscribe(e => {
if(e is WebSocketException we)
Console.WriteLine($"WebSocketException: {we.Message} (WebSocketError {we.WebSocketErrorCode}, ErrorCode {we.ErrorCode}, NativeErrorCode {we.NativeErrorCode}");
else
Console.WriteLine($"Exception in websocket receive stream: {e.ToString()}");
}));

subscriptions.Add(CreateSubscription("1", client));
await Task.Delay(200);
subscriptions.Add(CreateSubscription2("2", client));
await Task.Delay(200);
subscriptions.Add(CreateSubscription("3", client));
await Task.Delay(200);
subscriptions.Add(CreateSubscription("4", client));
await Task.Delay(200);
subscriptions.Add(CreateSubscription("5", client));
await Task.Delay(200);
subscriptions.Add(CreateSubscription("6", client));
await Task.Delay(200);
subscriptions.Add(CreateSubscription("7", client));

using (subscriptions)
{
Console.WriteLine("client setup complete");
var quit = false;
do
{
Console.WriteLine("write message and press enter...");
var message = Console.ReadLine();
var graphQLRequest = new GraphQLRequest(@"
mutation($input: MessageInputType){
addMessage(message: $input){
content
}
}")
{
Variables = new
{
input = new
{
fromId = "2",
content = message,
sentAt = DateTime.Now
}
}
};
var result = await client.SendMutationAsync(graphQLRequest).ConfigureAwait(false);

if(result.Errors != null && result.Errors.Length > 0)
{
Console.WriteLine($"request returned {result.Errors.Length} errors:");
foreach (var item in result.Errors)
{
Console.WriteLine($"{item.Message}");
}
}
}
while(!quit);
Console.WriteLine("shutting down ...");
}
Console.WriteLine("subscriptions disposed ...");
}
Console.WriteLine("client disposed ...");
}

private static IDisposable CreateSubscription(string id, GraphQLHttpClient client)
{
#pragma warning disable 618
var stream = client.CreateSubscriptionStream(new GraphQLRequest(@"
subscription {
messageAdded{
content
from {
displayName
}
}
}"
)
{ Variables = new { id } });
#pragma warning restore 618

return stream.Subscribe(
response => Console.WriteLine($"{id}: new message from \"{response.Data.messageAdded.from.displayName.Value}\": {response.Data.messageAdded.content.Value}"),
exception => Console.WriteLine($"{id}: message subscription stream failed: {exception}"),
() => Console.WriteLine($"{id}: message subscription stream completed"));

}


private static IDisposable CreateSubscription2(string id, GraphQLHttpClient client)
{
#pragma warning disable 618
var stream = client.CreateSubscriptionStream(new GraphQLRequest(@"
subscription {
contentAdded{
content
from {
displayName
}
}
}"
)
{ Variables = new { id } });
#pragma warning restore 618

return stream.Subscribe(
response => Console.WriteLine($"{id}: new content from \"{response.Data.contentAdded.from.displayName.Value}\": {response.Data.contentAdded.content.Value}"),
exception => Console.WriteLine($"{id}: content subscription stream failed: {exception}"),
() => Console.WriteLine($"{id}: content subscription stream completed"));

}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFrameworks>netcoreapp3.0;net461</TargetFrameworks>
<LangVersion>8.0</LangVersion>
</PropertyGroup>

<ItemGroup>
<PackageReference Include="System.Reactive" Version="4.1.2" />
</ItemGroup>

<ItemGroup>
<ProjectReference Include="..\src\GraphQL.Client\GraphQL.Client.csproj" />
<ProjectReference Include="..\src\GraphQL.Common\GraphQL.Common.csproj" />
</ItemGroup>

</Project>
4 changes: 2 additions & 2 deletions root.props
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
<GenerateDocumentationFile>True</GenerateDocumentationFile>
<LangVersion>8.0</LangVersion>
<NeutralLanguage>en-US</NeutralLanguage>
<NoWarn>CS0618;CS1591;CS1701</NoWarn>
<NoWarn>CS0618;CS1591;CS1701;NU5105;NU5125</NoWarn>
<PackageIconUrl>https://raw.githubusercontent.com/graphql-dotnet/graphql-client/master/assets/logo.64x64.png</PackageIconUrl>
<PackageLicenseUrl>https://raw.githubusercontent.com/graphql-dotnet/graphql-client/master/LICENSE.txt</PackageLicenseUrl>
<PackageProjectUrl>https://github.com/graphql-dotnet/graphql-client</PackageProjectUrl>
Expand All @@ -17,7 +17,7 @@
<RepositoryType>git</RepositoryType>
<RepositoryUrl>https://github.com/graphql-dotnet/graphql-client.git</RepositoryUrl>
<TreatWarningsAsErrors>True</TreatWarningsAsErrors>
<Version>2.0.0-alpha.4</Version>
<Version>2.0.0-alpha.4.subscription-api.10</Version>
<WarningLevel>4</WarningLevel>
</PropertyGroup>

Expand Down
10 changes: 9 additions & 1 deletion src/GraphQL.Client/GraphQL.Client.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@

<PropertyGroup>
<Description>A GraphQL Client</Description>
<TargetFramework>netstandard2.0</TargetFramework>
<TargetFrameworks>netstandard2.0</TargetFrameworks>
</PropertyGroup>

<ItemGroup>
Expand All @@ -14,6 +14,14 @@

<ItemGroup>
<PackageReference Include="System.Net.WebSockets.Client" Version="4.3.2" />
<PackageReference Include="System.Net.WebSockets.Client.Managed" Version="1.0.22" />
<PackageReference Include="System.Reactive" Version="4.1.2" />
</ItemGroup>

<ItemGroup>
<Reference Include="System.Reactive">
<HintPath>C:\Users\arose\.nuget\packages\system.reactive\4.1.2\lib\netstandard2.0\System.Reactive.dll</HintPath>
</Reference>
</ItemGroup>

<!-- Allow method ReadAsAsync<T>
Expand Down
Loading