From da8299212a42bcc4000130067a15aa8a8d608931 Mon Sep 17 00:00:00 2001 From: Alexander Rose Date: Wed, 7 Oct 2020 21:53:20 +0200 Subject: [PATCH 1/5] add ConnectionParams object --- .../GraphQLWebSocketRequest.cs | 4 ++-- src/GraphQL.Client/GraphQLHttpClientOptions.cs | 6 ++++++ src/GraphQL.Client/Websocket/GraphQLHttpWebSocket.cs | 8 ++++---- 3 files changed, 12 insertions(+), 6 deletions(-) diff --git a/src/GraphQL.Client.Abstractions.Websocket/GraphQLWebSocketRequest.cs b/src/GraphQL.Client.Abstractions.Websocket/GraphQLWebSocketRequest.cs index 623e4271..c71b4e28 100644 --- a/src/GraphQL.Client.Abstractions.Websocket/GraphQLWebSocketRequest.cs +++ b/src/GraphQL.Client.Abstractions.Websocket/GraphQLWebSocketRequest.cs @@ -34,9 +34,9 @@ public string Type /// /// The payload of the websocket request /// - public GraphQLRequest Payload + public object Payload { - get => ContainsKey(PAYLOAD_KEY) ? (GraphQLRequest)this[PAYLOAD_KEY] : null; + get => ContainsKey(PAYLOAD_KEY) ? this[PAYLOAD_KEY] : null; set => this[PAYLOAD_KEY] = value; } diff --git a/src/GraphQL.Client/GraphQLHttpClientOptions.cs b/src/GraphQL.Client/GraphQLHttpClientOptions.cs index 6e2c3a46..ff36808f 100644 --- a/src/GraphQL.Client/GraphQLHttpClientOptions.cs +++ b/src/GraphQL.Client/GraphQLHttpClientOptions.cs @@ -56,5 +56,11 @@ public class GraphQLHttpClientOptions /// Configure additional websocket options (i.e. headers). This will not be invoked on Windows 7 when targeting .NET Framework 4.x. /// public Action ConfigureWebsocketOptions { get; set; } = options => { }; + + /// + /// The `ConnectionParams` object sent with the GQL_CONNECTION_INIT message on establishing a websocket connection. + /// See https://github.com/apollographql/subscriptions-transport-ws/blob/master/PROTOCOL.md#gql_connection_init. + /// + public object? WebSocketConnectionParams { get; set; } = null; } } diff --git a/src/GraphQL.Client/Websocket/GraphQLHttpWebSocket.cs b/src/GraphQL.Client/Websocket/GraphQLHttpWebSocket.cs index dfdf39c4..8bf8adee 100644 --- a/src/GraphQL.Client/Websocket/GraphQLHttpWebSocket.cs +++ b/src/GraphQL.Client/Websocket/GraphQLHttpWebSocket.cs @@ -105,7 +105,7 @@ public IObservable> CreateSubscriptionStream> CreateSubscriptionStream>(o => @@ -179,8 +179,8 @@ public IObservable> CreateSubscriptionStream Date: Wed, 7 Oct 2020 23:40:41 +0200 Subject: [PATCH 2/5] use TryGetValue --- .../GraphQLWebSocketRequest.cs | 6 +++--- src/GraphQL.Primitives/GraphQLRequest.cs | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/GraphQL.Client.Abstractions.Websocket/GraphQLWebSocketRequest.cs b/src/GraphQL.Client.Abstractions.Websocket/GraphQLWebSocketRequest.cs index c71b4e28..d1ea99d5 100644 --- a/src/GraphQL.Client.Abstractions.Websocket/GraphQLWebSocketRequest.cs +++ b/src/GraphQL.Client.Abstractions.Websocket/GraphQLWebSocketRequest.cs @@ -18,7 +18,7 @@ public class GraphQLWebSocketRequest : Dictionary, IEquatable public string Id { - get => ContainsKey(ID_KEY) ? (string)this[ID_KEY] : null; + get => TryGetValue(ID_KEY, out object value) ? (string)value : null; set => this[ID_KEY] = value; } @@ -27,7 +27,7 @@ public string Id /// public string Type { - get => ContainsKey(TYPE_KEY) ? (string)this[TYPE_KEY] : null; + get => TryGetValue(TYPE_KEY, out object value) ? (string)value : null; set => this[TYPE_KEY] = value; } @@ -36,7 +36,7 @@ public string Type /// public object Payload { - get => ContainsKey(PAYLOAD_KEY) ? this[PAYLOAD_KEY] : null; + get => TryGetValue(PAYLOAD_KEY, out object value) ? value : null; set => this[PAYLOAD_KEY] = value; } diff --git a/src/GraphQL.Primitives/GraphQLRequest.cs b/src/GraphQL.Primitives/GraphQLRequest.cs index 72033552..7727272d 100644 --- a/src/GraphQL.Primitives/GraphQLRequest.cs +++ b/src/GraphQL.Primitives/GraphQLRequest.cs @@ -18,7 +18,7 @@ public class GraphQLRequest : Dictionary, IEquatable public string Query { - get => ContainsKey(QUERY_KEY) ? (string)this[QUERY_KEY] : null; + get => TryGetValue(QUERY_KEY, out object value) ? (string)value : null; set => this[QUERY_KEY] = value; } @@ -27,7 +27,7 @@ public string Query /// public string? OperationName { - get => ContainsKey(OPERATION_NAME_KEY) ? (string)this[OPERATION_NAME_KEY] : null; + get => TryGetValue(OPERATION_NAME_KEY, out object value) ? (string)value : null; set => this[OPERATION_NAME_KEY] = value; } @@ -36,7 +36,7 @@ public string? OperationName /// public object? Variables { - get => ContainsKey(VARIABLES_KEY) ? this[VARIABLES_KEY] : null; + get => TryGetValue(VARIABLES_KEY, out object value) ? value : null; set => this[VARIABLES_KEY] = value; } From 5816b208427e5e07d7b8982253bf8fa11e53895f Mon Sep 17 00:00:00 2001 From: Alexander Rose Date: Wed, 7 Oct 2020 23:51:27 +0200 Subject: [PATCH 3/5] Use Func instead of static object to configure --- .../GraphQLWebSocketRequest.cs | 4 ++-- src/GraphQL.Client/GraphQLHttpClientOptions.cs | 2 +- src/GraphQL.Client/Websocket/GraphQLHttpWebSocket.cs | 7 ++++--- 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/src/GraphQL.Client.Abstractions.Websocket/GraphQLWebSocketRequest.cs b/src/GraphQL.Client.Abstractions.Websocket/GraphQLWebSocketRequest.cs index d1ea99d5..f83fe5aa 100644 --- a/src/GraphQL.Client.Abstractions.Websocket/GraphQLWebSocketRequest.cs +++ b/src/GraphQL.Client.Abstractions.Websocket/GraphQLWebSocketRequest.cs @@ -14,7 +14,7 @@ public class GraphQLWebSocketRequest : Dictionary, IEquatable - /// The Identifier of the Response + /// The Identifier of the request /// public string Id { @@ -34,7 +34,7 @@ public string Type /// /// The payload of the websocket request /// - public object Payload + public object? Payload { get => TryGetValue(PAYLOAD_KEY, out object value) ? value : null; set => this[PAYLOAD_KEY] = value; diff --git a/src/GraphQL.Client/GraphQLHttpClientOptions.cs b/src/GraphQL.Client/GraphQLHttpClientOptions.cs index ff36808f..be249baa 100644 --- a/src/GraphQL.Client/GraphQLHttpClientOptions.cs +++ b/src/GraphQL.Client/GraphQLHttpClientOptions.cs @@ -61,6 +61,6 @@ public class GraphQLHttpClientOptions /// The `ConnectionParams` object sent with the GQL_CONNECTION_INIT message on establishing a websocket connection. /// See https://github.com/apollographql/subscriptions-transport-ws/blob/master/PROTOCOL.md#gql_connection_init. /// - public object? WebSocketConnectionParams { get; set; } = null; + public Func SetWebSocketConnectionParams { get; set; } = () => null; } } diff --git a/src/GraphQL.Client/Websocket/GraphQLHttpWebSocket.cs b/src/GraphQL.Client/Websocket/GraphQLHttpWebSocket.cs index 8bf8adee..74647c5d 100644 --- a/src/GraphQL.Client/Websocket/GraphQLHttpWebSocket.cs +++ b/src/GraphQL.Client/Websocket/GraphQLHttpWebSocket.cs @@ -98,12 +98,13 @@ public IObservable> CreateSubscriptionStream>(async observer => { Debug.WriteLine($"Create observable thread id: {Thread.CurrentThread.ManagedThreadId}"); - await _client.Options.PreprocessRequest(request, _client); + var preprocessedRequest = await _client.Options.PreprocessRequest(request, _client); + var startRequest = new GraphQLWebSocketRequest { Id = Guid.NewGuid().ToString("N"), Type = GraphQLWebSocketMessageType.GQL_START, - Payload = request + Payload = preprocessedRequest }; var stopRequest = new GraphQLWebSocketRequest { @@ -114,7 +115,7 @@ public IObservable> CreateSubscriptionStream>(o => From 0ca0ce9f1885ac44db912d678aa5783987f5557a Mon Sep 17 00:00:00 2001 From: Alexander Rose Date: Wed, 7 Oct 2020 23:53:36 +0200 Subject: [PATCH 4/5] fix naming --- src/GraphQL.Client/GraphQLHttpClientOptions.cs | 4 ++-- src/GraphQL.Client/Websocket/GraphQLHttpWebSocket.cs | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/GraphQL.Client/GraphQLHttpClientOptions.cs b/src/GraphQL.Client/GraphQLHttpClientOptions.cs index be249baa..ab8949c6 100644 --- a/src/GraphQL.Client/GraphQLHttpClientOptions.cs +++ b/src/GraphQL.Client/GraphQLHttpClientOptions.cs @@ -58,9 +58,9 @@ public class GraphQLHttpClientOptions public Action ConfigureWebsocketOptions { get; set; } = options => { }; /// - /// The `ConnectionParams` object sent with the GQL_CONNECTION_INIT message on establishing a websocket connection. + /// Sets the `ConnectionParams` object sent with the GQL_CONNECTION_INIT message on establishing a GraphQL websocket connection. /// See https://github.com/apollographql/subscriptions-transport-ws/blob/master/PROTOCOL.md#gql_connection_init. /// - public Func SetWebSocketConnectionParams { get; set; } = () => null; + public Func SetWebSocketConnectionInitPayload { get; set; } = () => null; } } diff --git a/src/GraphQL.Client/Websocket/GraphQLHttpWebSocket.cs b/src/GraphQL.Client/Websocket/GraphQLHttpWebSocket.cs index 74647c5d..f26e3e54 100644 --- a/src/GraphQL.Client/Websocket/GraphQLHttpWebSocket.cs +++ b/src/GraphQL.Client/Websocket/GraphQLHttpWebSocket.cs @@ -115,7 +115,7 @@ public IObservable> CreateSubscriptionStream>(o => From 937dc9ca78e29fe5e91a30a1e35c64e1ef724efa Mon Sep 17 00:00:00 2001 From: Alexander Rose Date: Thu, 8 Oct 2020 23:07:26 +0200 Subject: [PATCH 5/5] add options as context for init payload --- src/GraphQL.Client/GraphQLHttpClientOptions.cs | 2 +- src/GraphQL.Client/Websocket/GraphQLHttpWebSocket.cs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/GraphQL.Client/GraphQLHttpClientOptions.cs b/src/GraphQL.Client/GraphQLHttpClientOptions.cs index ab8949c6..c0054813 100644 --- a/src/GraphQL.Client/GraphQLHttpClientOptions.cs +++ b/src/GraphQL.Client/GraphQLHttpClientOptions.cs @@ -61,6 +61,6 @@ public class GraphQLHttpClientOptions /// Sets the `ConnectionParams` object sent with the GQL_CONNECTION_INIT message on establishing a GraphQL websocket connection. /// See https://github.com/apollographql/subscriptions-transport-ws/blob/master/PROTOCOL.md#gql_connection_init. /// - public Func SetWebSocketConnectionInitPayload { get; set; } = () => null; + public Func ConfigureWebSocketConnectionInitPayload { get; set; } = options => null; } } diff --git a/src/GraphQL.Client/Websocket/GraphQLHttpWebSocket.cs b/src/GraphQL.Client/Websocket/GraphQLHttpWebSocket.cs index f26e3e54..28af82d6 100644 --- a/src/GraphQL.Client/Websocket/GraphQLHttpWebSocket.cs +++ b/src/GraphQL.Client/Websocket/GraphQLHttpWebSocket.cs @@ -115,7 +115,7 @@ public IObservable> CreateSubscriptionStream>(o =>