Exemplo n.º 1
0
        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));
        }
Exemplo n.º 2
0
        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)
        {
        }
    }