public virtual async Task <CallResult <UpdateSubscription> > SubscribeToTickerAsync(string pair, Action <CoinzoSocketTicker> onData) { var id = NextSubscriptionId(); var key = $"{string.Format("{0:0000000000}", id)}-ticker-{pair}"; SubscriptionChannels.Add(key, string.Empty); var internalHandler = new Action <DataEvent <IEnumerable <object> > >(data => { if (SubscriptionChannels.ContainsKey(key)) { if (data.Data.Count() > 0 && (string)(data.Data.ElementAt(0)) == SubscriptionChannels[key]) { for (var i = 1; i < data.Data.Count(); i++) { var ticker = JsonConvert.DeserializeObject <CoinzoSocketTicker>(data.Data.ElementAt(i).ToString()); ticker.Pair = pair; ticker.Open = ticker.Close - ticker.Change; onData(ticker); } } } }); var request = new CoinzoSocketRequest { Event = "subscribe", Channel = "ticker", Pair = pair, SubscriptionKey = key }; return(await SubscribeAsync(request, null, false, internalHandler).ConfigureAwait(false)); }
public virtual async Task <CallResult <UpdateSubscription> > SubscribeToCandlesAsync(string pair, CoinzoPeriod period, Action <CoinzoSocketCandle> onData) { var id = NextSubscriptionId(); var key = $"{string.Format("{0:0000000000}", id)}-candles-{pair}"; SubscriptionChannels.Add(key, string.Empty); var internalHandler = new Action <DataEvent <IEnumerable <object> > >(data => { if (SubscriptionChannels.ContainsKey(key)) { if (data.Data.Count() > 0 && (string)(data.Data.ElementAt(0)) == SubscriptionChannels[key]) { for (var i = 1; i < data.Data.Count(); i++) { var candles = JsonConvert.DeserializeObject <IEnumerable <CoinzoSocketCandle> >(data.Data.ElementAt(i).ToString()); foreach (var candle in candles) { candle.Pair = pair; candle.Period = period; onData(candle); } } } } }); var period_s = JsonConvert.SerializeObject(period, new PeriodConverter(false)); var request = new CoinzoSocketRequest { Event = "subscribe", Channel = "candles", Pair = pair, Key = period_s, SubscriptionKey = key }; return(await SubscribeAsync(request, null, false, internalHandler).ConfigureAwait(false)); }
public virtual async Task <CallResult <UpdateSubscription> > SubscribeToOrderBookAsync(string pair, Action <CoinzoSocketOrderBookTotal> onTotalData, Action <CoinzoSocketOrderBookEntry> onEntryData) { var id = NextSubscriptionId(); var key = $"{string.Format("{0:0000000000}", id)}-book-{pair}"; SubscriptionChannels.Add(key, string.Empty); var internalHandler = new Action <DataEvent <IEnumerable <object> > >(data => { if (SubscriptionChannels.ContainsKey(key)) { if (data.Data.Count() > 0 && (string)(data.Data.ElementAt(0)) == SubscriptionChannels[key]) { for (var i = 1; i < data.Data.Count(); i++) { if (i == 1) { var total = JsonConvert.DeserializeObject <CoinzoSocketOrderBookTotal>(data.Data.ElementAt(i).ToString()); total.Pair = pair; onTotalData(total); } else { var entry = JsonConvert.DeserializeObject <CoinzoSocketOrderBookEntry>(data.Data.ElementAt(i).ToString()); entry.Pair = pair; onEntryData(entry); } } } } }); var request = new CoinzoSocketRequest { Event = "subscribe", Channel = "book", Pair = pair, Precision = 0, SubscriptionKey = key }; return(await SubscribeAsync(request, null, false, internalHandler).ConfigureAwait(false)); }