Пример #1
0
        protected virtual async Task <string[]> AddMarketSymbolsToChannel(IWebSocket socket, string channelFormat, string[] marketSymbols)
        {
            if (marketSymbols == null || marketSymbols.Length == 0)
            {
                marketSymbols = (await GetMarketSymbolsAsync()).ToArray();
            }
            var spotSymbols   = marketSymbols.Where(ms => ms.Split('-').Length == 2);
            var futureSymbols = marketSymbols.Where(
                ms => ms.Split('-').Length == 3 && int.TryParse(ms.Split('-')[2], out int i));
            var swapSymbols = marketSymbols.Where(
                ms => ms.Split('-').Length == 3 && ms.Split('-')[2] == "SWAP");

            await sendMessageAsync("spot", spotSymbols);
            await sendMessageAsync("futures", futureSymbols);
            await sendMessageAsync("swap", swapSymbols);

            async Task sendMessageAsync(string category, IEnumerable <string> symbolsToSend)
            {
                var channels = symbolsToSend
                               .Select(marketSymbol => string.Format($"{category}{channelFormat}", NormalizeMarketSymbol(marketSymbol)))
                               .ToArray();
                await socket.SendMessageAsync(new { op = "subscribe", args = channels });
            }

            return(marketSymbols);
        }
Пример #2
0
        private async Task <string[]> AddMarketSymbolsToChannel(IWebSocket socket, string channelFormat, string[] marketSymbols)
        {
            if (marketSymbols == null || marketSymbols.Length == 0)
            {
                marketSymbols = (await GetMarketSymbolsMetadataAsync()).Where(s => s.IsActive).Select(s => s.MarketSymbol).ToArray();
            }

            var channels = marketSymbols
                           .Select(marketSymbol => string.Format(channelFormat, NormalizeMarketSymbol(marketSymbol)))
                           .ToArray();

            await socket.SendMessageAsync(new { op = "subscribe", args = channels });

            return(marketSymbols);
        }
 private async Task <string[]> AddMarketSymbolsToChannel(IWebSocket socket, string channelFormat, string[] marketSymbols, bool useJustFirstSymbol = false)
 {
     if (marketSymbols == null || marketSymbols.Length == 0)
     {
         marketSymbols = (await GetMarketSymbolsAsync()).ToArray();
     }
     foreach (string marketSymbol in marketSymbols)
     {
         string normalizedSymbol = NormalizeMarketSymbol(marketSymbol);
         if (useJustFirstSymbol)
         {
             normalizedSymbol = normalizedSymbol.Substring(0, normalizedSymbol.IndexOf(MarketSymbolSeparator[0]));
         }
         string channel = string.Format(channelFormat, normalizedSymbol);
         await socket.SendMessageAsync(new { @event = "addChannel", channel });
     }
     return(marketSymbols);
 }
Пример #4
0
 private async Task <string[]> AddSymbolsToChannel(IWebSocket socket, string channelFormat, string[] symbols, bool useJustFirstSymbol = false)
 {
     if (symbols == null || symbols.Length == 0)
     {
         symbols = (await GetSymbolsAsync()).ToArray();
     }
     foreach (string symbol in symbols)
     {
         string normalizedSymbol = NormalizeSymbol(symbol);
         if (useJustFirstSymbol)
         {
             normalizedSymbol = normalizedSymbol.Substring(0, normalizedSymbol.IndexOf(SymbolSeparator[0]));
         }
         string channel = string.Format(channelFormat, normalizedSymbol);
         string msg     = $"{{\"event\":\"addChannel\",\"channel\":\"{channel}\"}}";
         await socket.SendMessageAsync(msg);
     }
     return(symbols);
 }
Пример #5
0
        /// <summary>
        /// 响应websocket返回的msg信息
        /// </summary>
        /// <param name="socket"></param>
        /// <param name="msg"></param>
        /// <param name="symbols"></param>
        /// <param name="dataKey"></param>
        /// <returns></returns>
        private async Task <Tuple <JToken, Symbol> > ProcessWebsocketMessage(IWebSocket socket, byte[] msg,
                                                                             Symbol[] symbols, string dataKey = "tick")
        {
            var    str   = msg.ToStringFromUTF8Gzip();
            JToken token = JToken.Parse(str);

            if (token["status"] != null)
            {
                //todo:订阅失败
                return(null);
            }

            if (token["ping"] != null)
            {
                await socket.SendMessageAsync(str.Replace("ping", "pong"));

                return(null);
            }

            var val = token["ch"].ToStringInvariant();

            if (symbols == null)
            {
                symbols = this.Symbols.ToArray();
            }

            var symbol = GetSysmbol(val, symbols);

            if (symbol == null) //订阅错误
            {
                return(null);
            }

            JToken data = token[dataKey];

            return(new Tuple <JToken, Symbol>(data, symbol));
        }
 // internal for testing
 internal static async Task Send(IWebSocket webSocket, string data)
 {
     await webSocket.SendMessageAsync(data);
 }