Exemplo n.º 1
0
        private async Task <IList <IList <T> > > GetAllSubsequentPages <T>(
            string uri,
            string firstPageAfterCursorId,
            int numberOfPages)
        {
            var pagedList = new List <IList <T> >();
            var subsequentPageAfterHeaderId = firstPageAfterCursorId;

            var runCount = numberOfPages == 0
                ? int.MaxValue
                : numberOfPages;

            while (runCount > 1)
            {
                var subsequentHttpResponseMessage = await SendHttpRequestMessageAsync(HttpMethod.Get, uri + $"&after={subsequentPageAfterHeaderId}").ConfigureAwait(false);

                if (!subsequentHttpResponseMessage.Headers.TryGetValues("cb-after", out var cursorHeaders))
                {
                    break;
                }

                subsequentPageAfterHeaderId = cursorHeaders.First();

                var subsequentContentBody = await httpClient.ReadAsStringAsync(subsequentHttpResponseMessage).ConfigureAwait(false);

                var page = JsonConfig.DeserializeObject <IList <T> >(subsequentContentBody);

                pagedList.Add(page);

                runCount--;
            }

            return(pagedList);
        }
Exemplo n.º 2
0
        protected async Task <IList <IList <T> > > SendHttpRequestMessagePagedAsync <T>(
            HttpMethod httpMethod,
            string uri,
            string content    = null,
            int numberOfPages = 0)
        {
            Log.Debug("REST {HttpMethod} {Uri} {Content} {NumberOfPages}", httpMethod, uri, content, numberOfPages);

            var pagedList = new List <IList <T> >();

            var httpResponseMessage = await SendHttpRequestMessageAsync(httpMethod, uri, content);

            var contentBody = await httpClient.ReadAsStringAsync(httpResponseMessage).ConfigureAwait(false);

            var firstPage = JsonConfig.DeserializeObject <IList <T> >(contentBody);

            pagedList.Add(firstPage);

            if (!httpResponseMessage.Headers.TryGetValues("cb-after", out var firstPageAfterCursorId))
            {
                return(pagedList);
            }

            var subsequentPages = await GetAllSubsequentPages <T>(uri, firstPageAfterCursorId.First(), numberOfPages);

            pagedList.AddRange(subsequentPages);

            return(pagedList);
        }
Exemplo n.º 3
0
        protected async Task <T> SendServiceCall <T>(
            HttpMethod httpMethod,
            string uri,
            string content = null)
        {
            var httpResponseMessage = await SendHttpRequestMessageAsync(httpMethod, uri, content);

            var contentBody = await httpClient.ReadAsStringAsync(httpResponseMessage).ConfigureAwait(false);

            return(JsonConfig.DeserializeObject <T>(contentBody));
        }
Exemplo n.º 4
0
 public static bool TryDeserializeObject <T>(this string json, out T result)
 {
     try
     {
         result = JsonConfig.DeserializeObject <T>(json);
         return(true);
     }
     catch
     {
         result = default;
         return(false);
     }
 }
        protected async Task <T> SendServiceCall <T>(
            HttpMethod httpMethod,
            string uri,
            string content = null)
        {
            Log.Debug("REST {HttpMethod} {Uri} {Content}", httpMethod, uri, content);

            var httpResponseMessage = await SendHttpRequestMessageAsync(httpMethod, uri, content);

            var contentBody = await httpClient.ReadAsStringAsync(httpResponseMessage).ConfigureAwait(false);

            if (typeof(T) == typeof(string))
            {
                return((T)(object)contentBody);
            }

            return(JsonConfig.DeserializeObject <T>(contentBody));
        }
Exemplo n.º 6
0
        private async Task <HttpResponseMessage> SendHttpRequestMessageAsync(
            HttpMethod httpMethod,
            string uri,
            string content = null)
        {
            var httpRequestMessage = content == null
                ? httpRequestMessageService.CreateHttpRequestMessage(httpMethod, uri)
                : httpRequestMessageService.CreateHttpRequestMessage(httpMethod, uri, content);

            var httpResponseMessage = await httpClient.SendAsync(httpRequestMessage).ConfigureAwait(false);

            if (httpResponseMessage.IsSuccessStatusCode)
            {
                Log.Verbose("@httpResponseMessage", httpResponseMessage);

                return(httpResponseMessage);
            }

            var contentBody = await httpClient.ReadAsStringAsync(httpResponseMessage).ConfigureAwait(false);

            string errorMessage;

            try
            {
                var jsonMsg = JsonConfig.DeserializeObject <CoinbaseProErrorMessage>(contentBody);
                errorMessage = jsonMsg.Message;
            }
            catch
            {
                errorMessage = contentBody;
            }

            var ex = new CoinbaseProHttpException(errorMessage)
            {
                StatusCode      = httpResponseMessage.StatusCode,
                RequestMessage  = httpRequestMessage,
                ResponseMessage = httpResponseMessage,
                EndPoint        = new EndPoint(httpMethod, uri, content)
            };

            Log.Error("REST request about to throw {@CoinbaseProHttpException}", ex);

            throw ex;
        }
Exemplo n.º 7
0
        private async Task <HttpResponseMessage> SendHttpRequestMessageAsync(
            HttpMethod httpMethod,
            string uri,
            string content = null)
        {
            var httpRequestMessage = content == null
                ? httpRequestMessageService.CreateHttpRequestMessage(httpMethod, uri)
                : httpRequestMessageService.CreateHttpRequestMessage(httpMethod, uri, content);

            var httpResponseMessage = await httpClient.SendAsync(httpRequestMessage).ConfigureAwait(false);

            if (httpResponseMessage.IsSuccessStatusCode)
            {
                return(httpResponseMessage);
            }

            var contentBody = await httpClient.ReadAsStringAsync(httpResponseMessage).ConfigureAwait(false);

            string errorMessage;

            try
            {
                var jsonMsg = JsonConfig.DeserializeObject <GDAXErrorMessage>(contentBody);
                errorMessage = jsonMsg.Message;
            }
            catch
            {
                errorMessage = contentBody;
            }

            throw new GDAXSharpHttpException(errorMessage)
                  {
                      StatusCode      = httpResponseMessage.StatusCode,
                      RequestMessage  = httpRequestMessage,
                      ResponseMessage = httpResponseMessage,
                      EndPoint        = new EndPoint(httpMethod, uri, content)
                  };
        }
Exemplo n.º 8
0
        public void WebSocket_MessageReceived(object sender, MessageReceivedEventArgs e)
        {
            if (stopWebSocket)
            {
                return;
            }

            var json = e.Message;

            if (!json.TryDeserializeObject <BaseMessage>(out var response))
            {
                Log.Error("Could not deserialize response because the type doesn't exist {@ResponseJson}.", json);
            }

            switch (response?.Type)
            {
            case ResponseType.Subscriptions:
                var subscription = JsonConfig.DeserializeObject <Subscription>(json);
                if (subscription.Channels == null || !subscription.Channels.Any())
                {
                    Subscribe();
                }
                else
                {
                    webSocketFeed.Invoke(OnSubscriptionReceived, sender, new WebfeedEventArgs <Subscription>(subscription));
                }
                break;

            case ResponseType.Ticker:
                var ticker = JsonConfig.DeserializeObject <Ticker>(json);
                webSocketFeed.Invoke(OnTickerReceived, sender, new WebfeedEventArgs <Ticker>(ticker));
                break;

            case ResponseType.Snapshot:
                var snapshot = JsonConfig.DeserializeObject <Snapshot>(json);
                webSocketFeed.Invoke(OnSnapShotReceived, sender, new WebfeedEventArgs <Snapshot>(snapshot));
                break;

            case ResponseType.L2Update:
                var level2 = JsonConfig.DeserializeObject <Level2>(json);
                webSocketFeed.Invoke(OnLevel2UpdateReceived, sender, new WebfeedEventArgs <Level2>(level2));
                break;

            case ResponseType.Heartbeat:
                var heartbeat = JsonConfig.DeserializeObject <Heartbeat>(json);
                webSocketFeed.Invoke(OnHeartbeatReceived, sender, new WebfeedEventArgs <Heartbeat>(heartbeat));
                break;

            case ResponseType.Received:
                var received = JsonConfig.DeserializeObject <Received>(json);
                webSocketFeed.Invoke(OnReceivedReceived, sender, new WebfeedEventArgs <Received>(received));
                break;

            case ResponseType.Open:
                var open = JsonConfig.DeserializeObject <Open>(json);
                webSocketFeed.Invoke(OnOpenReceived, sender, new WebfeedEventArgs <Open>(open));
                break;

            case ResponseType.Done:
                var done = JsonConfig.DeserializeObject <Done>(json);
                webSocketFeed.Invoke(OnDoneReceived, sender, new WebfeedEventArgs <Done>(done));
                break;

            case ResponseType.Match:
                var match = JsonConfig.DeserializeObject <Match>(json);
                webSocketFeed.Invoke(OnMatchReceived, sender, new WebfeedEventArgs <Match>(match));
                break;

            case ResponseType.LastMatch:
                var lastMatch = JsonConfig.DeserializeObject <LastMatch>(json);
                webSocketFeed.Invoke(OnLastMatchReceived, sender, new WebfeedEventArgs <LastMatch>(lastMatch));
                break;

            case ResponseType.Error:
                var error = JsonConfig.DeserializeObject <Error>(json);
                webSocketFeed.Invoke(OnErrorReceived, sender, new WebfeedEventArgs <Error>(error));
                break;

            case ResponseType.Change:
                var change = JsonConfig.DeserializeObject <Change>(json);
                webSocketFeed.Invoke(OnChangeReceived, sender, new WebfeedEventArgs <Change>(change));
                break;

            case ResponseType.Activate:
                var activate = JsonConfig.DeserializeObject <Activate>(json);
                webSocketFeed.Invoke(OnActivateReceived, sender, new WebfeedEventArgs <Activate>(activate));
                break;

            default:
                Log.Error("Unknown ResponseType {@ResponseJson}. Ignoring message received.", json);
                break;
            }
        }
Exemplo n.º 9
0
        public void WebSocket_MessageReceived(object sender, MessageReceivedEventArgs e)
        {
            if (stopWebSocket)
            {
                webSocketFeed.Close();
                return;
            }

            var json     = e.Message;
            var response = JsonConfig.DeserializeObject <BaseMessage>(json);

            switch (response.Type)
            {
            case ResponseType.Subscriptions:
                var subscription = JsonConfig.DeserializeObject <Subscription>(json);
                webSocketFeed.Invoke(OnSubscriptionReceived, sender, new WebfeedEventArgs <Subscription>(subscription));
                break;

            case ResponseType.Ticker:
                var ticker = JsonConfig.DeserializeObject <Ticker>(json);
                webSocketFeed.Invoke(OnTickerReceived, sender, new WebfeedEventArgs <Ticker>(ticker));
                break;

            case ResponseType.Snapshot:
                var snapshot = JsonConfig.DeserializeObject <Snapshot>(json);
                webSocketFeed.Invoke(OnSnapShotReceived, sender, new WebfeedEventArgs <Snapshot>(snapshot));
                break;

            case ResponseType.L2Update:
                var level2 = JsonConfig.DeserializeObject <Level2>(json);
                webSocketFeed.Invoke(OnLevel2UpdateReceived, sender, new WebfeedEventArgs <Level2>(level2));
                break;

            case ResponseType.Heartbeat:
                var heartbeat = JsonConfig.DeserializeObject <Heartbeat>(json);
                webSocketFeed.Invoke(OnHeartbeatReceived, sender, new WebfeedEventArgs <Heartbeat>(heartbeat));
                break;

            case ResponseType.Received:
                var received = JsonConfig.DeserializeObject <Received>(json);
                webSocketFeed.Invoke(OnReceivedReceived, sender, new WebfeedEventArgs <Received>(received));
                break;

            case ResponseType.Open:
                var open = JsonConfig.DeserializeObject <Open>(json);
                webSocketFeed.Invoke(OnOpenReceived, sender, new WebfeedEventArgs <Open>(open));
                break;

            case ResponseType.Done:
                var done = JsonConfig.DeserializeObject <Done>(json);
                webSocketFeed.Invoke(OnDoneReceived, sender, new WebfeedEventArgs <Done>(done));
                break;

            case ResponseType.Match:
                var match = JsonConfig.DeserializeObject <Match>(json);
                webSocketFeed.Invoke(OnMatchReceived, sender, new WebfeedEventArgs <Match>(match));
                break;

            case ResponseType.LastMatch:
                var lastMatch = JsonConfig.DeserializeObject <LastMatch>(json);
                webSocketFeed.Invoke(OnLastMatchReceived, sender, new WebfeedEventArgs <LastMatch>(lastMatch));
                break;

            case ResponseType.Error:
                var error = JsonConfig.DeserializeObject <Error>(json);
                webSocketFeed.Invoke(OnErrorReceived, sender, new WebfeedEventArgs <Error>(error));
                break;

            default:
                throw new ArgumentOutOfRangeException();
            }
        }