Skip to content

Commit d9ca634

Browse files
committed
Add connection_init payload
1 parent 860f39d commit d9ca634

4 files changed

Lines changed: 24 additions & 12 deletions

File tree

src/Linq2GraphQL.Client.Subscriptions/GraphSubscriptionExecute.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ public async Task<IObservable<TResult>> StartAsync()
2626
return sseClient.Subscription.Select(e => ConvertResult(queryExecutor.ProcessResponse(e, QueryNode.Name, payload.Query)));
2727
}
2828

29-
var wsClient = new WSClient(client.SubscriptionUrl, client.SubscriptionProtocol, payload);
29+
var wsClient = new WSClient(client, payload);
3030
await wsClient.Start();
3131
return wsClient.Subscription.Select(e => ConvertResult(queryExecutor.ProcessResponse(e, QueryNode.Name, payload.Query)));
3232
}

src/Linq2GraphQL.Client.Subscriptions/WSClient.cs

Lines changed: 20 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -9,19 +9,17 @@ namespace Linq2GraphQL.Client.Subscriptions;
99

1010
public class WSClient : IAsyncDisposable
1111
{
12+
private readonly GraphClient _graphClient;
1213
private readonly GraphQLRequest payload;
13-
private readonly SubscriptionProtocol subscriptionProtocol;
1414

1515
private readonly Subject<string> subscriptionSubject = new();
16-
private readonly string url;
1716
private readonly WebsocketClient client;
1817

1918
private readonly JsonSerializerOptions jsonOptions;
2019

21-
public WSClient(string url, SubscriptionProtocol subprotocol, GraphQLRequest payload)
20+
public WSClient(GraphClient graphClient, GraphQLRequest payload)
2221
{
23-
this.url = url;
24-
subscriptionProtocol = subprotocol;
22+
_graphClient = graphClient;
2523
this.payload = payload;
2624
jsonOptions = new JsonSerializerOptions
2725
{
@@ -35,7 +33,7 @@ public WSClient(string url, SubscriptionProtocol subprotocol, GraphQLRequest pay
3533
return ws;
3634
});
3735

38-
client = new WebsocketClient(new Uri(url), factory)
36+
client = new WebsocketClient(new Uri(_graphClient.SubscriptionUrl), factory)
3937
{
4038
ReconnectTimeout = TimeSpan.FromSeconds(30)
4139
};
@@ -74,7 +72,18 @@ public async Task Start()
7472
});
7573

7674
await client.Start();
77-
SendRequest(new WebsocketRequest("connection_init"));
75+
76+
if (_graphClient.WSConnectionInitPayload is not null)
77+
{
78+
var initPayload = _graphClient.WSConnectionInitPayload(_graphClient);
79+
if (initPayload is not null)
80+
{
81+
SendRequest(new WebsocketRequest("connection_init")
82+
{
83+
Payload = await _graphClient.WSConnectionInitPayload(_graphClient)
84+
});
85+
}
86+
}
7887

7988
var subscriptionRequest = new WebsocketRequest(GetSubscribeCommand())
8089
{
@@ -87,7 +96,7 @@ public async Task Start()
8796

8897
private string GetSubprotocolString()
8998
{
90-
switch (subscriptionProtocol)
99+
switch (_graphClient.SubscriptionProtocol)
91100
{
92101
case SubscriptionProtocol.GraphQLWebSocket:
93102
return "graphql-transport-ws";
@@ -96,13 +105,13 @@ private string GetSubprotocolString()
96105
return "graphql-ws";
97106

98107
default:
99-
throw new Exception($"{subscriptionProtocol} is unknown");
108+
throw new Exception($"{_graphClient.SubscriptionProtocol} is unknown");
100109
}
101110
}
102111

103112
private string GetSubscribeCommand()
104113
{
105-
switch (subscriptionProtocol)
114+
switch (_graphClient.SubscriptionProtocol)
106115
{
107116
case SubscriptionProtocol.GraphQLWebSocket:
108117
return "subscribe";
@@ -111,7 +120,7 @@ private string GetSubscribeCommand()
111120
return "start";
112121

113122
default:
114-
throw new Exception($"{subscriptionProtocol} is unknown");
123+
throw new Exception($"{_graphClient.SubscriptionProtocol} is unknown");
115124
}
116125
}
117126

src/Linq2GraphQL.Client/GraphClient.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ public GraphClient(HttpClient httpClient, IOptions<GraphClientOptions> options,
3636
public HttpClient HttpClient { get; }
3737
public JsonSerializerOptions SerializerOptions { get; }
3838

39+
public Func<GraphClient, Task<GraphQLRequest>> WSConnectionInitPayload => options.Value.WSConnectionInitPayload;
3940
private string GetSubscriptionUrl()
4041
{
4142
var baseUrl = HttpClient?.BaseAddress.ToString();
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
1+
12
namespace Linq2GraphQL.Client;
23

34
public class GraphClientOptions
45
{
56
public bool UseSafeMode { get; set; } = false;
67
public SubscriptionProtocol SubscriptionProtocol { get; set; } = default;
8+
public Func<GraphClient, Task<GraphQLRequest>> WSConnectionInitPayload { get; internal set; } = opts => null;
79
}

0 commit comments

Comments
 (0)