// Determines if the incoming message is a request or a response.
        private void ProcessMessage(JsonElement?element)
        {
            if (element == null || element.Value.ValueKind != JsonValueKind.Object)
            {
                return;
            }

            var properties = element.Value.EnumerateObject().Select(p => (JsonProperty?)p).ToArray();
            var id         = properties.GetPropertyOrNull("id")?.Value.ToString();
            var method     = properties.GetPropertyOrNull("method")?.Value.GetString();

            if (!method.IsNullOrEmpty())
            {
                var parameters = properties.GetPropertyOrNull("params")?.Value;
                var request    = new IncomingRequest {
                    Id = id, Method = method, Params = parameters
                };
                _requestProcess(request);
                return;
            }

            var result = properties.GetPropertyOrNull("result")?.Value.GetRawText();

            if (!result.IsNullOrEmpty())
            {
                var response = new IncomingResponse {
                    Id = id, Result = result
                };
                _responseProcess(response);
            }
        }
Exemple #2
0
 private void HandleIncomingResponse(IncomingResponse response)
 {
     Task.Factory.StartNew(() =>
     {
         if (!response.Id.IsNullOrEmpty())
         {
             _responses.Remove(response.Id !, out var responseTask);
             responseTask?.TrySetResult(response.Result ?? String.Empty);
         }
     }, _cancellationToken);
 }