public async Task SendJsonRpcResult(JsonRpcResult result) { string SerializeTimeoutException() { JsonRpcErrorResponse error = _jsonRpcService.GetErrorResponse(ErrorCodes.Timeout, "Request was canceled due to enabled timeout."); return(_jsonSerializer.Serialize(error)); } string resultData; try { resultData = result.IsCollection ? _jsonSerializer.Serialize(result.Responses) : _jsonSerializer.Serialize(result.Response); } catch (Exception e) when(e.InnerException is OperationCanceledException) { resultData = SerializeTimeoutException(); } catch (OperationCanceledException) { resultData = SerializeTimeoutException(); } await SendRawAsync(resultData); }
public async Task ReceiveAsync(Memory <byte> data) { string SerializeTimeoutException() { JsonRpcErrorResponse error = _jsonRpcService.GetErrorResponse(ErrorCodes.Timeout, "Request was canceled due to enabled timeout."); return(_jsonSerializer.Serialize(error)); } Stopwatch stopwatch = Stopwatch.StartNew(); using JsonRpcResult result = await _jsonRpcProcessor.ProcessAsync(Encoding.UTF8.GetString(data.ToArray())); string resultData; try { resultData = result.IsCollection ? _jsonSerializer.Serialize(result.Responses) : _jsonSerializer.Serialize(result.Response); } catch (Exception e) when(e.InnerException is OperationCanceledException) { resultData = SerializeTimeoutException(); } catch (OperationCanceledException) { resultData = SerializeTimeoutException(); } await SendRawAsync(resultData); if (result.IsCollection) { _jsonRpcLocalStats.ReportCalls(result.Reports); _jsonRpcLocalStats.ReportCall(new RpcReport("# collection serialization #", stopwatch.ElapsedMicroseconds(), true)); } else { _jsonRpcLocalStats.ReportCall(result.Report, stopwatch.ElapsedMicroseconds()); } }