/// <summary>
        /// Listen to the User Data endpoint.
        /// </summary>
        /// <param name="accountInfoHandler">Handler to be used when a account message is received.</param>
        /// <param name="tradesHandler">Handler to be used when a trade message is received.</param>
        /// <param name="ordersHandler">Handler to be used when a order message is received.</param>
        /// <returns></returns>
        public string ListenUserDataEndpoint(BinanceApiAbstract.MessageHandler <AccountUpdatedMessage> accountInfoHandler, BinanceApiAbstract.MessageHandler <OrderOrTradeUpdatedMessage> tradesHandler, BinanceApiAbstract.MessageHandler <OrderOrTradeUpdatedMessage> ordersHandler)
        {
            string listenKey = StartUserStream().Result.ListenKey;

            _binanceApi.ConnectToUserDataWebSocket(listenKey, accountInfoHandler, tradesHandler, ordersHandler);

            return(listenKey);
        }
        /// <summary>
        /// Listen to the Kline endpoint.
        /// </summary>
        /// <param name="symbol">Ticker symbol.</param>
        /// <param name="interval">Time interval to retrieve.</param>
        /// <param name="klineHandler">Handler to be used when a message is received.</param>
        public void ListenKlineEndpoint(string symbol, TimeInterval interval, BinanceApiAbstract.MessageHandler <KlineMessage> klineHandler)
        {
            if (string.IsNullOrWhiteSpace(symbol))
            {
                throw new ArgumentException("symbol cannot be empty. ", nameof(symbol));
            }

            var param = symbol + $"@kline_{interval.GetDescription()}";

            _binanceApi.ConnectToWebSocket(param, klineHandler);
        }
        /// <summary>
        /// Listen to the Trades endpoint.
        /// </summary>
        /// <param name="symbol">Ticker symbol.</param>
        /// <param name="tradeHandler">Handler to be used when a message is received.</param>
        public void ListenTradeEndpoint(string symbol, BinanceApiAbstract.MessageHandler <AggregateTradeMessage> tradeHandler)
        {
            if (string.IsNullOrWhiteSpace(symbol))
            {
                throw new ArgumentException("symbol cannot be empty. ", nameof(symbol));
            }

            string param = symbol + "@aggTrade";

            _binanceApi.ConnectToWebSocket(param, tradeHandler);
        }
        /// <summary>
        /// Listen to the Depth endpoint.
        /// </summary>
        /// <param name="symbol">Ticker symbol.</param>
        /// <param name="depthHandler">Handler to be used when a message is received.</param>
        public void ListenDepthEndpoint(string symbol, BinanceApiAbstract.MessageHandler <DepthMessage> depthHandler)
        {
            if (string.IsNullOrWhiteSpace(symbol))
            {
                throw new ArgumentException("symbol cannot be empty. ", nameof(symbol));
            }

            string param = symbol + "@depth";

            _binanceApi.ConnectToWebSocket(param, depthHandler, true);
        }