Ejemplo n.º 1
0
 protected override IWebSocket OnGetTickersWebSocket(Action<IReadOnlyCollection<KeyValuePair<string, ExchangeTicker>>> callback, params string[] marketSymbols)
 {
     Dictionary<int, string> channelIdToSymbol = new Dictionary<int, string>();
     return ConnectWebSocket(string.Empty, (_socket, msg) =>
     {
         JToken token = JToken.Parse(msg.ToStringFromUTF8());
         if (token is JArray array)
         {
             if (array.Count > 10)
             {
                 List<KeyValuePair<string, ExchangeTicker>> tickerList = new List<KeyValuePair<string, ExchangeTicker>>();
                 if (channelIdToSymbol.TryGetValue(array[0].ConvertInvariant<int>(), out string symbol))
                 {
                     ExchangeTicker ticker = ParseTickerWebSocket(symbol, array);
                     if (ticker != null)
                     {
                         callback(new KeyValuePair<string, ExchangeTicker>[] { new KeyValuePair<string, ExchangeTicker>(symbol, ticker) });
                     }
                 }
             }
         }
         else if (token["event"].ToStringInvariant() == "subscribed" && token["channel"].ToStringInvariant() == "ticker")
         {
             // {"event":"subscribed","channel":"ticker","chanId":1,"pair":"BTCUSD"}
             int channelId = token["chanId"].ConvertInvariant<int>();
             channelIdToSymbol[channelId] = token["pair"].ToStringInvariant();
         }
         return Task.CompletedTask;
     }, async (_socket) =>
     {
         marketSymbols = marketSymbols == null || marketSymbols.Length == 0 ? (await GetMarketSymbolsAsync()).ToArray() : marketSymbols;
         foreach (var marketSymbol in marketSymbols)
         {
             await _socket.SendMessageAsync(new { @event = "subscribe", channel = "ticker", pair = marketSymbol });
         }
     });
 }