private async Task <TResponse> SendRpcAsyncInternal <TResponse>(string cmd, object payload, Optional <string> evt, RequestOptions options) where TResponse : class { byte[] bytes = null; var guid = Guid.NewGuid(); payload = new API.Rpc.RpcFrame { Cmd = cmd, Event = evt, Args = payload, Nonce = guid }; if (payload != null) { var json = SerializeJson(payload); bytes = Encoding.UTF8.GetBytes(json); } var requestTracker = new RpcRequest <TResponse>(options); _requests[guid] = requestTracker; await RequestQueue.SendAsync(new WebSocketRequest(_webSocketClient, null, bytes, true, options)).ConfigureAwait(false); await _sentRpcMessageEvent.InvokeAsync(cmd).ConfigureAwait(false); return(await requestTracker.Promise.Task.ConfigureAwait(false)); }
private bool ProcessMessage(API.Rpc.RpcFrame msg) { if (_requests.TryGetValue(msg.Nonce.Value.Value, out RpcRequest requestTracker)) { if (msg.Event.GetValueOrDefault("") == "ERROR") { var _ = requestTracker.SetExceptionAsync(msg.Data.GetValueOrDefault() as JToken, _serializer); } else { var _ = requestTracker.SetResultAsync(msg.Data.GetValueOrDefault() as JToken, _serializer); } return(true); } else { return(false); } }