protected override async Task <T> SendInnerRequestAync <T>(string method, string route = null, params object[] paramList) { var request = new RpcRequestMessage(Guid.NewGuid().ToString(), method, paramList); var response = await SendAsync(request, route).ConfigureAwait(false); HandleRpcError(response); return(response.GetResult <T>()); }
private async Task <RpcResponseMessage> SendAsync(RpcRequestMessage request, string route = null) { var logger = new RpcLogger(_log); try { var httpClient = GetOrCreateHttpClient(); var rpcRequestJson = JsonConvert.SerializeObject(request, _jsonSerializerSettings); var httpContent = new StringContent(rpcRequestJson, Encoding.UTF8, "application/json"); var cancellationTokenSource = new CancellationTokenSource(); cancellationTokenSource.CancelAfter(ConnectionTimeout); logger.LogRequest(rpcRequestJson); var httpResponseMessage = await httpClient.PostAsync(route, httpContent, cancellationTokenSource.Token).ConfigureAwait(false); httpResponseMessage.EnsureSuccessStatusCode(); var stream = await httpResponseMessage.Content.ReadAsStreamAsync(); using (var streamReader = new StreamReader(stream)) using (var reader = new JsonTextReader(streamReader)) { var serializer = JsonSerializer.Create(_jsonSerializerSettings); var message = serializer.Deserialize <RpcResponseMessage>(reader); logger.LogResponse(message); return(message); } } catch (TaskCanceledException ex) { throw new RpcClientTimeoutException($"Rpc timeout afer {ConnectionTimeout} milliseconds", ex); } catch (Exception ex) { logger.LogException(ex); throw new RpcClientUnknownException("Error occurred when trying to send rpc requests(s)", ex); } }