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; } }
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); } }
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(); }
protected ExchangeResponseBase(ExchangeResponse response) { }