From c62301b4bc9b7075fab2c7f702e1bbd7788b417d Mon Sep 17 00:00:00 2001 From: Dimitrie Stefanescu Date: Sat, 29 Aug 2020 11:49:28 +0100 Subject: [PATCH 1/2] fix(ws): added switch statement to handle close message events --- .../Websocket/GraphQLHttpWebSocket.cs | 27 ++++++++++++------- 1 file changed, 17 insertions(+), 10 deletions(-) diff --git a/src/GraphQL.Client/Websocket/GraphQLHttpWebSocket.cs b/src/GraphQL.Client/Websocket/GraphQLHttpWebSocket.cs index fec76d34..da9e8a9e 100644 --- a/src/GraphQL.Client/Websocket/GraphQLHttpWebSocket.cs +++ b/src/GraphQL.Client/Websocket/GraphQLHttpWebSocket.cs @@ -114,6 +114,7 @@ public IObservable> CreateSubscriptionStream>(o => @@ -563,16 +564,22 @@ private async Task ReceiveWebsocketMessagesAsync() _internalCancellationToken.ThrowIfCancellationRequested(); ms.Seek(0, SeekOrigin.Begin); - if (webSocketReceiveResult.MessageType == WebSocketMessageType.Text) + switch (webSocketReceiveResult.MessageType) { - var response = await _client.JsonSerializer.DeserializeToWebsocketResponseWrapperAsync(ms); - response.MessageBytes = ms.ToArray(); - Debug.WriteLine($"{response.MessageBytes.Length} bytes received for id {response.Id} on websocket {_clientWebSocket.GetHashCode()} (thread {Thread.CurrentThread.ManagedThreadId})..."); - return response; - } - else - { - throw new NotSupportedException("binary websocket messages are not supported"); + case WebSocketMessageType.Text: + var response = await _client.JsonSerializer.DeserializeToWebsocketResponseWrapperAsync(ms); + response.MessageBytes = ms.ToArray(); + Debug.WriteLine($"{response.MessageBytes.Length} bytes received for id {response.Id} on websocket {_clientWebSocket.GetHashCode()} (thread {Thread.CurrentThread.ManagedThreadId})..."); + return response; + + case WebSocketMessageType.Close: + var closeResponse = await _client.JsonSerializer.DeserializeToWebsocketResponseWrapperAsync(ms); + closeResponse.MessageBytes = ms.ToArray(); + Debug.WriteLine($"Connection closed by the server."); + throw new Exception("Connection closed by the server."); + + case WebSocketMessageType.Binary: + throw new NotSupportedException("binary websocket messages are not supported"); } } catch (Exception e) @@ -643,7 +650,7 @@ private async Task CompleteAsync() _exceptionSubject?.OnCompleted(); _exceptionSubject?.Dispose(); _internalCancellationTokenSource.Dispose(); - + Debug.WriteLine("GraphQLHttpWebSocket disposed"); } From 15c5e3668d9e6c91192e8cccbcad0a8ee5e47b99 Mon Sep 17 00:00:00 2001 From: Alexander Rose Date: Tue, 15 Sep 2020 22:40:40 +0200 Subject: [PATCH 2/2] cherrypick webSocketReceiveResult default case from pr 272 --- src/GraphQL.Client/Websocket/GraphQLHttpWebSocket.cs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/GraphQL.Client/Websocket/GraphQLHttpWebSocket.cs b/src/GraphQL.Client/Websocket/GraphQLHttpWebSocket.cs index da9e8a9e..2f4a86f4 100644 --- a/src/GraphQL.Client/Websocket/GraphQLHttpWebSocket.cs +++ b/src/GraphQL.Client/Websocket/GraphQLHttpWebSocket.cs @@ -578,8 +578,9 @@ private async Task ReceiveWebsocketMessagesAsync() Debug.WriteLine($"Connection closed by the server."); throw new Exception("Connection closed by the server."); - case WebSocketMessageType.Binary: - throw new NotSupportedException("binary websocket messages are not supported"); + default: + throw new NotSupportedException($"Websocket message type {webSocketReceiveResult.MessageType} not supported."); + } } catch (Exception e)