public virtual async Task <CallResult <UpdateSubscription> > SubscribeToTodayAsync(IEnumerable <string> symbols, Action <ThodexSocketToday> onData) { // To List var symbolList = symbols.ToList(); // Check Point if (symbolList.Count == 0) { throw new ArgumentException("Symbols must contain 1 element at least"); } // Check Point if (symbolList.Count > 100) { throw new ArgumentException("Symbols can contain maximum 100 elements"); } var internalHandler = new Action <ThodexSocketUpdateResponse>(data => { if (data.Method == WSMethods_Today_Update && data.Data.Count == 2) { if (symbols.Contains((string)data.Data[0])) { var symbol = (string)data.Data[0]; var today = JsonConvert.DeserializeObject <ThodexToday>(data.Data[1].ToString()); onData(new ThodexSocketToday(symbol, today)); } } }); var request = new ThodexSocketRequest(this.NextRequestId(), WSMethods_Today_Subscribe, symbols); return(await Subscribe(request, null, false, internalHandler).ConfigureAwait(false)); }
public virtual async Task <CallResult <UpdateSubscription> > SubscribeToPriceAsync(IEnumerable <string> symbols, Action <ThodexSocketPrice> onData) { // To List var symbolList = symbols.ToList(); // Check Point if (symbolList.Count == 0) { throw new ArgumentException("Symbols must contain 1 element at least"); } // Check Point if (symbolList.Count > 100) { throw new ArgumentException("Symbols can contain maximum 100 elements"); } var internalHandler = new Action <ThodexSocketUpdateResponse>(data => { if (data.Method == WSMethods_Price_Update && data.Data.Count == 2) { if (symbols.Contains((string)data.Data[0])) { onData(new ThodexSocketPrice((string)data.Data[0], ((string)data.Data[1]).ToDecimal())); } } }); var request = new ThodexSocketRequest(this.NextRequestId(), WSMethods_Price_Subscribe, symbols); return(await Subscribe(request, null, false, internalHandler).ConfigureAwait(false)); }
public virtual async Task <CallResult <UpdateSubscription> > SubscribeToKlinesAsync(string symbol, ThodexPeriod period, Action <ThodexSocketCandle> onData) { var internalHandler = new Action <ThodexSocketUpdateResponse>(data => { if (data.Method == WSMethods_Kline_Update && data.Data.Count == 1) { var json = data.Data[0].ToString(); if (json.StartsWith("[[") && json.EndsWith("]]")) { var klines = JsonConvert.DeserializeObject <IEnumerable <ThodexSocketCandle> >(json); foreach (var kline in klines) { if (kline.Symbol.ToUpper() == symbol.ToUpper()) { onData(kline); } } } else { var kline = JsonConvert.DeserializeObject <ThodexSocketCandle>(json); if (kline.Symbol.ToUpper() == symbol.ToUpper()) { onData(kline); } } } }); var request = new ThodexSocketRequest(this.NextRequestId(), WSMethods_Kline_Subscribe, symbol, Convert.ToInt32(JsonConvert.SerializeObject(period, new PeriodConverter(false))));; return(await Subscribe(request, null, false, internalHandler).ConfigureAwait(false)); }
public virtual async Task <CallResult <DateTime> > TimeAsync() { var request = new ThodexSocketRequest(this.NextRequestId(), WSMethods_ServerTime_Query); var response = await Query <ThodexSocketQueryResponse <int> >(request, false).ConfigureAwait(true); return(new CallResult <DateTime>(response.Data.Data.FromUnixTimeSeconds(), response.Error)); }
public virtual async Task <CallResult <ThodexSocketPingPong> > PingAsync() { var pit = DateTime.UtcNow; var sw = Stopwatch.StartNew(); var request = new ThodexSocketRequest(this.NextRequestId(), WSMethods_ServerPing_Query); var response = await Query <ThodexSocketQueryResponse <string> >(request, false).ConfigureAwait(true); var pot = DateTime.UtcNow; sw.Stop(); var result = new ThodexSocketPingPong { PingTime = pit, PongTime = pot, Latency = sw.Elapsed, PongMessage = response.Data.Data }; return(new CallResult <ThodexSocketPingPong>(result, response.Error)); }
public virtual async Task <CallResult <UpdateSubscription> > SubscribeToOrderBookAsync(string symbol, Action <ThodexSocketOrderBook> onData) { var internalHandler = new Action <ThodexSocketUpdateResponse>(data => { if (data.Method == WSMethods_Depth_Update && data.Data.Count == 3) { if (symbol == (string)data.Data[2]) { var orderbook = JsonConvert.DeserializeObject <ThodexOrderBook>(data.Data[1].ToString()); onData(new ThodexSocketOrderBook((string)data.Data[2], (bool)data.Data[0], orderbook)); } } }); var request = new ThodexSocketRequest(this.NextRequestId(), WSMethods_Depth_Subscribe, symbol, 100, "0"); return(await Subscribe(request, null, false, internalHandler).ConfigureAwait(false)); }