// 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); } }
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); }