Example #1
0
        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));
        }
Example #2
0
        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));
        }
Example #3
0
        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));
        }
Example #4
0
        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));
        }
Example #5
0
        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));
        }
Example #6
0
        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));
        }