Пример #1
0
        private async Task <T> RequestSignedApiAsync <T>(RestSharp.IRestRequest request, int weight, TimeSpan offset, int tries = 0)
        {
            try
            {
                //await slim.WaitAsync().ConfigureAwait(true);
                request.AddQueryParameter("timestamp", DateTime.UtcNow.Add(offset).ToUnixTimestamp().ToString());
                var uri       = client.BuildUri(request);
                var signature = ByteArrayToHexString(SignString(uri.Query.Replace("?", string.Empty)));
                request.AddQueryParameter("signature", signature);
                request.AddHeader("X-MBX-APIKEY", ApiKey.ToManagedString());
                var response = await client.ExecuteTaskAsync <T>(request).ConfigureAwait(false);

                if (response.StatusCode == System.Net.HttpStatusCode.OK)
                {
                    UpdateWeight(PlaceOrderWeight);
                    return(JsonConvert.DeserializeObject <T>(response.Content));
                    //return response.Data;
                }
                else if (response.StatusCode >= System.Net.HttpStatusCode.InternalServerError)
                {
                    // retry...
                    return(await RequestSignedApiAsync <T>(request, weight, offset, tries + 1));
                }
                else if (response.StatusCode >= System.Net.HttpStatusCode.BadRequest)
                {
                    var error = client.Deserialize <ApiError>(response).Data;
                    if (error.Code == -1021 && tries < 5)
                    {
                        // retry...
                        return(await RequestSignedApiAsync <T>(request, weight, offset, tries + 1));
                    }
                    else
                    {
                        throw new Exception($"Error {error.Code}: {error.Msg}.");
                    }
                }
                else
                {
                    throw new Exception(response.ErrorMessage);
                }
            }
            finally
            {
                //slim.Release();
            }
        }
        private async Task <RestSharp.IRestResponse <T> > RequestSignedApiAsync <T>(RestSharp.IRestRequest request, TimeSpan offset)
        {
            try
            {
                //await slim.WaitAsync().ConfigureAwait(true);
                request.AddQueryParameter("timestamp", ToUnixTimestamp(DateTime.UtcNow.Add(offset)).ToString());
                var uri       = client.BuildUri(request);
                var signature = ByteArrayToHexString(SignString(uri.Query.Replace("?", string.Empty)));
                request.AddQueryParameter("signature", signature);
                request.AddHeader("X-MBX-APIKEY", ApiKey.ToManagedString());
                var response = await client.ExecuteTaskAsync <T>(request).ConfigureAwait(false);

                return(response);
            }
            finally
            {
                //slim.Release();
            }
        }