Skip to content

Commit 527bf44

Browse files
authored
Merge pull request #278 from graphql-dotnet/handle-websocket-close-message
Handle websocket close message
2 parents 5b59759 + 15c5e36 commit 527bf44

File tree

1 file changed

+18
-10
lines changed

1 file changed

+18
-10
lines changed

src/GraphQL.Client/Websocket/GraphQLHttpWebSocket.cs

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,7 @@ public IObservable<GraphQLResponse<TResponse>> CreateSubscriptionStream<TRespons
114114
{
115115
Id = startRequest.Id,
116116
Type = GraphQLWebSocketMessageType.GQL_CONNECTION_INIT,
117+
Payload = new GraphQLRequest()
117118
};
118119

119120
var observable = Observable.Create<GraphQLResponse<TResponse>>(o =>
@@ -563,16 +564,23 @@ private async Task<WebsocketMessageWrapper> ReceiveWebsocketMessagesAsync()
563564
_internalCancellationToken.ThrowIfCancellationRequested();
564565
ms.Seek(0, SeekOrigin.Begin);
565566

566-
if (webSocketReceiveResult.MessageType == WebSocketMessageType.Text)
567+
switch (webSocketReceiveResult.MessageType)
567568
{
568-
var response = await _client.JsonSerializer.DeserializeToWebsocketResponseWrapperAsync(ms);
569-
response.MessageBytes = ms.ToArray();
570-
Debug.WriteLine($"{response.MessageBytes.Length} bytes received for id {response.Id} on websocket {_clientWebSocket.GetHashCode()} (thread {Thread.CurrentThread.ManagedThreadId})...");
571-
return response;
572-
}
573-
else
574-
{
575-
throw new NotSupportedException("binary websocket messages are not supported");
569+
case WebSocketMessageType.Text:
570+
var response = await _client.JsonSerializer.DeserializeToWebsocketResponseWrapperAsync(ms);
571+
response.MessageBytes = ms.ToArray();
572+
Debug.WriteLine($"{response.MessageBytes.Length} bytes received for id {response.Id} on websocket {_clientWebSocket.GetHashCode()} (thread {Thread.CurrentThread.ManagedThreadId})...");
573+
return response;
574+
575+
case WebSocketMessageType.Close:
576+
var closeResponse = await _client.JsonSerializer.DeserializeToWebsocketResponseWrapperAsync(ms);
577+
closeResponse.MessageBytes = ms.ToArray();
578+
Debug.WriteLine($"Connection closed by the server.");
579+
throw new Exception("Connection closed by the server.");
580+
581+
default:
582+
throw new NotSupportedException($"Websocket message type {webSocketReceiveResult.MessageType} not supported.");
583+
576584
}
577585
}
578586
catch (Exception e)
@@ -643,7 +651,7 @@ private async Task CompleteAsync()
643651
_exceptionSubject?.OnCompleted();
644652
_exceptionSubject?.Dispose();
645653
_internalCancellationTokenSource.Dispose();
646-
654+
647655
Debug.WriteLine("GraphQLHttpWebSocket disposed");
648656
}
649657

0 commit comments

Comments
 (0)