private async Task <List <RippleTransaction> > GetRippleTransactions(string address) { var txs = new List <RippleTransaction>(); object pagingMarker = null; do { var request = new FlurlRequest(_settings.RpcUrl); request.Settings.JsonSerializer = new NewtonsoftJsonSerializer(new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore }); if (!string.IsNullOrEmpty(_settings.RpcUsername)) { request = request.WithBasicAuth(_settings.RpcUsername, _settings.RpcPassword); } var response = await request .PostJsonAsync(new RippleAccountTransactionsRequest(address, marker : pagingMarker)) .ReceiveJson <RippleAccountTransactionsResponse>(); if (!string.IsNullOrEmpty(response.Result.Error)) { throw new InvalidOperationException($"XRP request error: {response.Result.ErrorMessage ?? response.Result.Error}"); } txs.AddRange(response.Result.Transactions); pagingMarker = response.Result.Marker; } while (pagingMarker != null); return(txs); }
public async Task <IRwsResponse> SendRequestAsync(IRwsRequest request, int?timeout = null) { var client = new FlurlRequest(Url.Combine(BaseUrl, request.UrlPath())); if (timeout != null) { client.WithTimeout((int)timeout); } if (request.RequiresAuthentication) { client.WithBasicAuth(_username, _password); } client.WithHeaders(request.Headers); var stopwatch = Stopwatch.StartNew(); HttpResponseMessage response = null; try { response = await client.AllowAnyHttpStatus().SendAsync(request.Method, request.RequestBody); } catch (FlurlHttpTimeoutException ex) { throw new RwsException($"Connection timeout for {client.Url.ToString()}", ex); } stopwatch.Stop(); LastResult = response; RequestTime = stopwatch.Elapsed; RwsExceptionHandler.Parse(response); return(request.Result(response)); }