private Task SendGraphQLSubscriptionRequest(GraphQLSubscriptionRequest graphQLSubscriptionRequest, CancellationToken cancellationToken = default) { var webSocketRequestString = JsonConvert.SerializeObject(graphQLSubscriptionRequest); var arraySegmentWebSocketRequest = new ArraySegment <byte>(Encoding.UTF8.GetBytes(webSocketRequestString)); return(this.clientWebSocket.SendAsync(arraySegmentWebSocketRequest, WebSocketMessageType.Text, true, cancellationToken)); }
private Task SendCloseMessageAsync(CancellationToken cancellationToken = default) { var webSocketRequest = new GraphQLSubscriptionRequest { Id = "1", Type = GQLWebSocketMessageType.GQL_STOP, Payload = this.graphQLRequest }; return(this.SendGraphQLSubscriptionRequest(webSocketRequest)); }
private async Task SendInitialMessageAsync(CancellationToken cancellationToken = default) { var webSocketRequest = new GraphQLSubscriptionRequest { Id = "1", Type = GQLWebSocketMessageType.GQL_START, Payload = this.graphQLRequest }; var webSocketRequestString = JsonConvert.SerializeObject(webSocketRequest); var arraySegmentWebSocketRequest = new ArraySegment <byte>(Encoding.UTF8.GetBytes(webSocketRequestString)); await this.clientWebSocket.SendAsync(arraySegmentWebSocketRequest, WebSocketMessageType.Text, true, cancellationToken).ConfigureAwait(false); }
public async Task StartAsync(CancellationToken cancellationToken = default) { var clientSocket = await clientWebSocket.ConnectAsync(webSocketUri, cancellationToken); if (clientSocket.State != WebSocketState.Open) { return; } var arraySegment = new ArraySegment <byte>(buffer); var graphQlSubscriptionRequest = new GraphQLSubscriptionRequest { Id = "1", Type = "start", Payload = graphQLRequest }; var jsonRequest = JsonConvert.SerializeObject(graphQlSubscriptionRequest); var payload = new ArraySegment <byte>(Encoding.UTF8.GetBytes(jsonRequest)); await clientSocket.SendAsync( payload, messageType : WebSocketMessageType.Text, endOfMessage : true, cancellationToken : cancellationToken); try { while (clientSocket.State == WebSocketState.Open) { cancellationToken.ThrowIfCancellationRequested(); var webSocketReceiveResult = await clientSocket.ReceiveAsync(arraySegment, cancellationToken); var response = Encoding.UTF8.GetString(arraySegment.Array, 0, webSocketReceiveResult.Count); var subscriptionResponse = JsonConvert.DeserializeObject <GraphQLSubscriptionResponse>(response); if (subscriptionResponse != null) { LastResponse = subscriptionResponse.Payload; OnReceive?.Invoke(subscriptionResponse.Payload); } } } catch (OperationCanceledException) { } }