public async void CandlePull(CandleWidth width, Coins Coin, Coins Pair, CancellationToken token) { await Task.Run(() => { try { RestClient client = new RestClient(ApiUrl); RestRequest request; CandleWidth _width = width; List <CandleBinance> clist; int limit = maxLimit; dictCandle.TryGetValue(_width, out clist); bool newList = false; if (width == CandleWidth.INIT) { width = CandleWidth.m5; request = new RestRequest("/klines?symbol=" + Coin + Pair + "&interval=" + App.candleStickWidthToString(width) + "&limit=" + minLimit); } else { request = new RestRequest("/klines?symbol=" + Coin + Pair + "&interval=" + App.candleStickWidthToString(width) + "&limit=" + maxLimit); } while (!token.IsCancellationRequested) { if (clist.Count <= maxLimit && clist.Count > minLimit) { limit = minLimit; if (_width != CandleWidth.INIT) { request = new RestRequest("/klines?symbol=" + Coin + Pair + "&interval=" + App.candleStickWidthToString(width) + "&limit=" + limit); } } else if (clist.Count == 0) { request = new RestRequest("/klines?symbol=" + Coin + Pair + "&interval=" + App.candleStickWidthToString(width) + "&limit=" + limit); } IRestResponse response = client.Execute(request); System.Diagnostics.Debug.WriteLine("Response Candle: " + response.ErrorMessage + " " + response.StatusCode + " " + response.IsSuccessful + " " + response.StatusDescription + " " + response.ErrorMessage + " " + response.ResponseStatus); if ((int)response.StatusCode == 429) { sleepTime = 3000; } if (response.IsSuccessful == false) { if (clist.Count > 0) { clist.Clear(); limit = maxLimit; newList = true; } Thread.Sleep(5000); continue; } List <CandleBinance> list = JsonConvert.DeserializeObject <List <CandleBinance> >(response.Content); if (_width == CandleWidth.INIT || (list.Count > minLimit && list.Count <= maxLimit)) { clist = list; } else if (list.Count == minLimit && clist.Count <= maxLimit) { CandleBinance clast = clist[clist.Count - 1]; CandleBinance last = list[list.Count - 1]; if (last.OpenTime == clast.OpenTime) { clist[clist.Count - 1] = last; ; clast = last; } else if (last.OpenTime > clast.OpenTime) { clist.RemoveAt(0); clist.Add(last); } /*System.Diagnostics.Debug.WriteLine("Pulled: " + clast.OpenTime + " " + last.OpenTime); * * foreach(CandleBinance cb in clist) * { * System.Diagnostics.Debug.WriteLine(cb.OpenTime); * } * System.Diagnostics.Debug.WriteLine("---------------");*/ } CandlePullEventArgs args = new CandlePullEventArgs(); args.Width = _width; args.candleList = clist.ToList <CandleIF>(); args.newList = newList; OnCandlePull(args); Thread.Sleep(sleepTime); } } catch (Exception e) { System.Diagnostics.Debug.WriteLine(e.Message + " " + e.StackTrace); throw; } }, token); }
protected virtual void OnCandlePull(CandlePullEventArgs e) { candlePulled?.Invoke(this, e); }