public GetAccountHoldsResponse(ExchangeResponse response) : base(response)
        {
            var json = response.ContentBody;
            var jArray = JArray.Parse(json);

            AccountHolds = jArray.Select(elem => new AccountHold(elem)).ToList();
        }
        public GetAccountHistoryResponse(ExchangeResponse response)
            : base(response)
        {
            var json = response.ContentBody;
            var jArray = JArray.Parse(json);

            AccountHistoryRecords = jArray.Select(elem => AccountHistory.FromJToken(elem)).ToList();
        }
        protected ExchangePageableResponseBase(ExchangeResponse response)
        {
            var beforeHeader = response.Headers.LastOrDefault(x => x.Key != null && x.Key.ToUpper() == "CB-BEFORE");
            var afterHeader = response.Headers.LastOrDefault(x => x.Key != null && x.Key.ToUpper() == "CB-AFTER");

            if (beforeHeader.Value != null)
                BeforePaginationToken = beforeHeader.Value.LastOrDefault();
            if (afterHeader.Value != null)
                AfterPaginationToken = afterHeader.Value.LastOrDefault();
        }
        protected async Task <ExchangeResponse> GetResponse(ExchangeRequestBase request)
        {
            var relativeUrl = request.RequestUrl;
            var absoluteUri = new Uri(new Uri(API_ENDPOINT_URL), relativeUrl);

            var timestamp = (request.TimeStamp).ToString(System.Globalization.CultureInfo.InvariantCulture);
            var body      = request.RequestBody;
            var method    = request.Method;
            var url       = absoluteUri.ToString();

            var passphrase = _authContainer.Passphrase;
            var apiKey     = _authContainer.ApiKey;

            // Caution: Use the relative URL, *NOT* the absolute one.
            var signature = _authContainer.ComputeSignature(timestamp, relativeUrl, method, body);

            using (var httpClient = new HttpClient())
            {
                HttpResponseMessage response;

                httpClient.DefaultRequestHeaders.Add("CB-ACCESS-KEY", apiKey);
                httpClient.DefaultRequestHeaders.Add("CB-ACCESS-SIGN", signature);
                httpClient.DefaultRequestHeaders.Add("CB-ACCESS-TIMESTAMP", timestamp);
                httpClient.DefaultRequestHeaders.Add("CB-ACCESS-PASSPHRASE", passphrase);

                httpClient.DefaultRequestHeaders.Add("User-Agent", "sefbkn.github.io");

                switch (method)
                {
                case "GET":
                    response = await httpClient.GetAsync(absoluteUri);

                    break;

                case "POST":
                    var requestBody = new StringContent(body);
                    response = await httpClient.PostAsync(absoluteUri, requestBody);

                    break;

                default:
                    throw new NotImplementedException("The supplied HTTP method is not supported: " + method ?? "(null)");
                }


                var contentBody = await response.Content.ReadAsStringAsync();

                var headers    = response.Headers.AsEnumerable();
                var statusCode = response.StatusCode;
                var isSuccess  = response.IsSuccessStatusCode;

                var genericExchangeResponse = new ExchangeResponse(statusCode, isSuccess, headers, contentBody);
                return(genericExchangeResponse);
            }
        }
        public GetProductOrderBookResponse(ExchangeResponse response) : base (response)
        {
            var json = response.ContentBody;
            var jObject = JObject.Parse(json);

            var bids = jObject["bids"].Select(x => (JArray) x).ToArray();
            var asks = jObject["asks"].Select(x => (JArray) x).ToArray();

            Sequence = jObject["sequence"].Value<int>();

            Sells = asks.Select(a => GetBidAskOrderFromJToken(a)).ToList();
            Buys = bids.Select(b => GetBidAskOrderFromJToken(b)).ToList();
        }
        protected ExchangePageableResponseBase(ExchangeResponse response) : base(response)
        {
            var beforeHeader = response.Headers.LastOrDefault(x => x.Key != null && x.Key.ToUpper() == "CB-BEFORE");
            var afterHeader  = response.Headers.LastOrDefault(x => x.Key != null && x.Key.ToUpper() == "CB-AFTER");

            if (beforeHeader.Value != null)
            {
                BeforePaginationToken = beforeHeader.Value.LastOrDefault();
            }
            if (afterHeader.Value != null)
            {
                AfterPaginationToken = afterHeader.Value.LastOrDefault();
            }
        }
        protected async Task<ExchangeResponse> GetResponse(ExchangeRequestBase request)
        {
            var relativeUrl = request.RequestUrl;
            var absoluteUri = new Uri(new Uri(API_ENDPOINT_URL), relativeUrl);

            var timestamp = (request.TimeStamp).ToString(System.Globalization.CultureInfo.InvariantCulture);
            var body = request.RequestBody;
            var method = request.Method;
            var url = absoluteUri.ToString();

            var passphrase = _authContainer.Passphrase;
            var apiKey = _authContainer.ApiKey;

            // Caution: Use the relative URL, *NOT* the absolute one.
            var signature = _authContainer.ComputeSignature(timestamp, relativeUrl, method, body);

            using(var httpClient = new HttpClient())
            {
                HttpResponseMessage response;

                httpClient.DefaultRequestHeaders.Add("CB-ACCESS-KEY", apiKey);
                httpClient.DefaultRequestHeaders.Add("CB-ACCESS-SIGN", signature);
                httpClient.DefaultRequestHeaders.Add("CB-ACCESS-TIMESTAMP", timestamp);
                httpClient.DefaultRequestHeaders.Add("CB-ACCESS-PASSPHRASE", passphrase);

                httpClient.DefaultRequestHeaders.Add("User-Agent", "sefbkn.github.io");

                switch(method)
                {
                    case "GET":
                        response = await httpClient.GetAsync(absoluteUri);
                        break;
                    case "POST":
                        var requestBody = new StringContent(body);
                        response = await httpClient.PostAsync(absoluteUri, requestBody);
                        break;
                    default:
                        throw new NotImplementedException("The supplied HTTP method is not supported: " + method ?? "(null)");
                }


                var contentBody = await response.Content.ReadAsStringAsync();
                var headers = response.Headers.AsEnumerable();
                var statusCode = response.StatusCode;
                var isSuccess = response.IsSuccessStatusCode;

                var genericExchangeResponse = new ExchangeResponse(statusCode, isSuccess, headers, contentBody);
                return genericExchangeResponse;
            }
        }
Beispiel #8
0
        protected async Task <ExchangeResponse> GetResponse(ExchangeRequestBase request)
        {
            var relativeUrlForURL = request.RequestUrl;
            var baseURI           = IsSandbox ? API_SANDBOX_ENDPOINT_URL : API_ENDPOINT_URL;
            var absoluteUri       = new Uri(baseURI, relativeUrlForURL);
            var uriBuilder        = new UriBuilder(absoluteUri);

            uriBuilder.Port = -1;

            // add query parameters
            var requestCasted = request as ExchangePageableRequestBase;
            var nvc           = HttpUtility.ParseQueryString(string.Empty);

            if (request is ExchangePageableRequestBase)
            {
                if (requestCasted.afterCursor != null)
                {
                    nvc["after"] = requestCasted.afterCursor;
                }
                if (requestCasted.RecordCount != null)
                {
                    nvc["limit"] = requestCasted.RecordCount.Value.ToString();
                }
                //if (requestCasted.ZeroBasedCursor < 0)
                //{
                //	nvc["before"] = (Math.Abs(requestCasted.ZeroBasedCursor-1)).ToString(); // change to 1 based
                //	if (requestCasted.RecordCount != null)
                //		nvc["limit"] = requestCasted.RecordCount.Value.ToString();
                //}
                //else if (requestCasted.ZeroBasedCursor > 0)
                //{
                //	nvc["after"] = (requestCasted.ZeroBasedCursor+1).ToString(); // change to 1 based
                //	if (requestCasted.RecordCount != null)
                //		nvc["limit"] = requestCasted.RecordCount.Value.ToString();
                //}
                // else it's zero so no need to put any query parameter
            }
            if (request is GetPersonalOrdersRequest)
            {
                var requestCasted2 = request as GetPersonalOrdersRequest;
                if (requestCasted2.Status != null)
                {
                    foreach (var status in requestCasted2.Status)
                    {
                        nvc.Add("status", status);
                    }
                }
            }
            if (request is CancelAllPersonalOrdersRequest)
            {
                var requestCasted3 = request as CancelAllPersonalOrdersRequest;
                if (requestCasted3.product_id != null)
                {
                    nvc["product_id"] = requestCasted3.product_id;
                }
            }
            if (nvc.Keys.Count > 0)
            {
                uriBuilder.Query = nvc.ToString();
            }

            var body   = request.RequestBody;
            var method = request.Method;
            var url    = uriBuilder.ToString();
            var relativeUrlForSignature = baseURI.MakeRelativeUri(uriBuilder.Uri).ToString();
            await rateGatePolling.WaitToProceedAsync();             // rate limit prior to TimeStamp being generated

            using (var httpClient = new HttpClient())
            {
                if (_authContainer != null)
                {                 // authenticated get, required for querying account specific data, but optional for public data
                                  // Caution: Use the relative URL, *NOT* the absolute one.
                    var signature = _authContainer.ComputeSignature("/" + relativeUrlForSignature, method, body);
                    httpClient.DefaultRequestHeaders.Add("CB-ACCESS-KEY", signature.ApiKey);
                    httpClient.DefaultRequestHeaders.Add("CB-ACCESS-SIGN", signature.Signature);
                    httpClient.DefaultRequestHeaders.Add("CB-ACCESS-TIMESTAMP", signature.TimeStamp);
                    httpClient.DefaultRequestHeaders.Add("CB-ACCESS-PASSPHRASE", signature.Passphrase);
                }

                httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue(ContentType));
                httpClient.DefaultRequestHeaders.Add("User-Agent", "vslee fork of sefbkn.github.io");

                HttpResponseMessage response;
                switch (method)
                {
                case "GET":
                    response = await httpClient.GetAsync(url);

                    break;

                case "POST":
                    var requestBody = new StringContent(body, Encoding.UTF8, "application/json");
                    response = await httpClient.PostAsync(url, requestBody);

                    break;

                case "DELETE":
                    response = await httpClient.DeleteAsync(url);

                    break;

                case "PUT":
                    throw new NotImplementedException("PUT");

                default:
                    throw new NotImplementedException("The supplied HTTP method is not supported: " + method ?? "(null)");
                }

                var contentBody = await response.Content.ReadAsStringAsync();

                var headers    = response.Headers.AsEnumerable();
                var statusCode = response.StatusCode;
                var isSuccess  = response.IsSuccessStatusCode;

                var genericExchangeResponse = new ExchangeResponse(statusCode, isSuccess, headers, contentBody);
                return(genericExchangeResponse);
            }
        }
Beispiel #9
0
        protected async Task <ExchangeResponse> GetResponse(ExchangeRequestBase request)
        {
            var relativeUrl = request.RequestUrl;
            var absoluteUri = new Uri(new Uri(API_ENDPOINT_URL), relativeUrl);

            var timeStamp = (request.TimeStamp).ToString(System.Globalization.CultureInfo.InvariantCulture);
            var body      = request.RequestBody;
            var method    = request.Method;
            var url       = absoluteUri.ToString();

            //String passphrase = "";
            //String apiKey = "";
            //// Caution: Use the relative URL, *NOT* the absolute one.
            //var signature = "";


            using (var httpClient = new HttpClient())
            {
                HttpResponseMessage response = null;

                httpClient.DefaultRequestHeaders.Add("User-Agent", "Mozilla/5.0");

                try
                {
                    switch (method)
                    {
                    case "GET":
                        try
                        {
                            response = await CoreGetRequest(request);    //await httpClient.GetAsync(absoluteUri);
                        }
                        catch (Exception ex)
                        {
                            if (ex.Message.ToLower().Contains("task was cancelled"))
                            {
                                await GetResponse(request);

                                return(null);
                            }

                            var innerExMsg = "";
                            if (ex.InnerException != null)
                            {
                                innerExMsg = ex.InnerException.Message.ToLower();
                            }

                            Logger.WriteLog("Exception occured in GET: " + innerExMsg);
                            //
                            if (innerExMsg.Contains("could not be resolved") ||
                                innerExMsg.Contains("unable to connect") ||
                                innerExMsg.Contains("could not create ssl/tls secure channel"))
                            {
                                while (response == null)
                                {
                                    Thread.Sleep(5 * 1000);
                                    Logger.WriteLog("Cant connect to server (in GET), retryin in 5 sec");

                                    try
                                    {
                                        //SharedTimeStamp = DateTime.UtcNow.ToUnixTimestamp().ToString(System.Globalization.CultureInfo.InvariantCulture);
                                        response = await CoreGetRequest(request);     // await httpClient.GetAsync(absoluteUri);
                                    }
                                    catch { };
                                }
                            }


                            //throw;
                        }



                        break;

                    case "POST":

                        try
                        {
                            response = await CorePostRequest(request);    //await httpClient.GetAsync(absoluteUri);
                        }
                        catch (Exception ex)
                        {
                            var innerExMsg = "";

                            if (ex.InnerException != null)
                            {
                                innerExMsg = ex.InnerException.Message.ToLower();
                            }

                            Logger.WriteLog("Exception occured in POST: " + innerExMsg);
                            //
                            if (innerExMsg.Contains("could not be resolved") ||
                                innerExMsg.Contains("unable to connect") ||
                                innerExMsg.Contains("could not create ssl/tls secure channel"))
                            {
                                var warningCounter = 0;
                                while (response == null)
                                {
                                    Thread.Sleep(5 * 1000);
                                    Logger.WriteLog("Cant connect to server (in POST), retryin in 5 sec");
                                    warningCounter += 1;
                                    try
                                    {
                                        //SharedTimeStamp = DateTime.UtcNow.ToUnixTimestamp().ToString(System.Globalization.CultureInfo.InvariantCulture);
                                        response = await CorePostRequest(request);     // await httpClient.GetAsync(absoluteUri);
                                    }
                                    catch { };

                                    if (warningCounter >= 10)
                                    {
                                        Logger.WriteLog(string.Format("tried to complete POST request more than {0} times", warningCounter));
                                        //break;
                                    }
                                }
                            }


                            //throw;
                        }
                        break;


                    case "DELETE":
                        //var requestBody = new StringContent(body, Encoding.UTF8, "application/json");
                        try
                        {
                            response = await CoreDeleteRequest(request);    //await httpClient.GetAsync(absoluteUri);
                        }
                        catch (Exception ex)
                        {
                            var innerExMsg = "";

                            if (ex.InnerException != null)
                            {
                                innerExMsg = ex.InnerException.Message.ToLower();
                            }

                            Logger.WriteLog("Exception occured in DELETE: " + innerExMsg);
                            //
                            if (innerExMsg.Contains("could not be resolved") ||
                                innerExMsg.Contains("unable to connect") ||
                                innerExMsg.Contains("could not create ssl/tls secure channel"))
                            {
                                while (response == null)
                                {
                                    Thread.Sleep(5 * 1000);
                                    Logger.WriteLog("Cant connect to server (in DELETE), retryin in 5 sec");

                                    try
                                    {
                                        //SharedTimeStamp = DateTime.UtcNow.ToUnixTimestamp().ToString(System.Globalization.CultureInfo.InvariantCulture);
                                        response = await CoreDeleteRequest(request);     // await httpClient.GetAsync(absoluteUri);
                                    }
                                    catch { };
                                }
                            }


                            //throw;
                        }
                        break;

                    default:
                        throw new NotImplementedException("The supplied HTTP method is not supported: " + method ?? "(null)");
                    }
                }
                catch (Exception ex)
                {
                    Logger.WriteLog("Error getting/setting server response/data: " + ex.Message);
                    throw new Exception("HTTP_GET_POST_DELTE_Error");
                }

                //Logger.WriteLog("processing rest of http request");

                var contentBody = await response.Content.ReadAsStringAsync();

                var headers    = response.Headers.AsEnumerable();
                var statusCode = response.StatusCode;
                var isSuccess  = response.IsSuccessStatusCode;

                var genericExchangeResponse = new ExchangeResponse(statusCode, isSuccess, headers, contentBody);
                return(genericExchangeResponse);
            }
        }
 protected ExchangeResponseBase(ExchangeResponse response) { }
 public GetFillsResponse(ExchangeResponse response) : base(response)
 {
     var json = response.ContentBody;
     var jArray = JArray.Parse(json);
     Fills = jArray.Select(elem => new Fill(elem)).ToList();
 }
Beispiel #12
0
 protected ExchangeResponseBase(ExchangeResponse response)
 {
 }