private void _webSocket_MessageReceived(object sender, MessageReceivedEventArgs e) { var message = JsonConvert.DeserializeObject <JArray>(e.Message); if (message.Count == 0 || message[0].Type != JTokenType.Integer) { return; } var msgCode = message[0].Value <int>(); switch (msgCode) { case MessageHelper.Heartbeat: break; case MessageHelper.AccountNotifications: break; case MessageHelper.TickerData: if (message.Count > 2) { for (int i = 2; i < message.Count; i++) { if (message[i].Type != JTokenType.Array && message[i].HasValues) { continue; } var tick = TickData.TickDataFromMessage(message[i].Values()); if (tick != null) { OnTickerUpdate?.Invoke(this, tick.ToQuote()); } } } break; default: //MessageHelper.ExchangeVolume24Hours: break; } }
internal static TickData TickDataFromMessage(IEnumerable <JToken> values) { if (values.Count() != 10) { return(null); } var valid = true; var tickData = new TickData() { CurrencyPairId = ConvertToInt(values.ElementAt(0), ref valid), LastTradePrice = ConvertStringToDecimal(values.ElementAt(1), ref valid), LowestAsk = ConvertStringToDecimal(values.ElementAt(2), ref valid), HighestBid = ConvertStringToDecimal(values.ElementAt(3), ref valid), PercentChange = ConvertStringToDecimal(values.ElementAt(4), ref valid), BaseVolume24Hours = ConvertStringToDecimal(values.ElementAt(5), ref valid), QuoteeVolume24Hours = ConvertStringToDecimal(values.ElementAt(6), ref valid), IsFrozen = (byte)ConvertToInt(values.ElementAt(7), ref valid), HighestPrice24Hours = ConvertStringToDecimal(values.ElementAt(8), ref valid), LowstPrice24Hours = ConvertStringToDecimal(values.ElementAt(9), ref valid) }; return(valid ? tickData : null); }