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); }
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); }
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); }
/// <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); }