Skip to content

Commit c62301b

Browse files
didimitrierose-a
authored andcommitted
fix(ws): added switch statement to handle close message events
1 parent 5b59759 commit c62301b

File tree

1 file changed

+17
-10
lines changed

1 file changed

+17
-10
lines changed

src/GraphQL.Client/Websocket/GraphQLHttpWebSocket.cs

Lines changed: 17 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,22 @@ 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+
case WebSocketMessageType.Binary:
582+
throw new NotSupportedException("binary websocket messages are not supported");
576583
}
577584
}
578585
catch (Exception e)
@@ -643,7 +650,7 @@ private async Task CompleteAsync()
643650
_exceptionSubject?.OnCompleted();
644651
_exceptionSubject?.Dispose();
645652
_internalCancellationTokenSource.Dispose();
646-
653+
647654
Debug.WriteLine("GraphQLHttpWebSocket disposed");
648655
}
649656

0 commit comments

Comments
 (0)