public async void Start(TradingViewTiker tiker, TikerValues tikerValues, ShellVm vm, int startDelayMs) { await Task.Delay(startDelayMs); _vm = vm; _tikerValues = tikerValues; _tradingViewExtractor = new TradingViewExtractor(tiker); _tradingViewExtractor.CrossRateFetched += TradingViewExtractorCrossRateFetched; _tradingViewExtractor.ConnectWebSocketAndRequestSession().Wait(); _tradingViewExtractor.RequestData().Wait(); while (true) { var result = _tradingViewExtractor.ReceiveData().Result; if (result) { Thread.Sleep(10); } else { Thread.Sleep(100); _tradingViewExtractor = new TradingViewExtractor(tiker); _tradingViewExtractor.CrossRateFetched += TradingViewExtractorCrossRateFetched; _tradingViewExtractor.ConnectWebSocketAndRequestSession().Wait(); _tradingViewExtractor.RequestData().Wait(); } } // ReSharper disable once FunctionNeverReturns }
private static string TikerToRequest(this TradingViewTiker tiker) { switch (tiker) { case TradingViewTiker.EurUsd: return(EurUsdRequest); case TradingViewTiker.UsdRub: return(UsdRubRequest); case TradingViewTiker.EurRub: return(EurRubRequest); case TradingViewTiker.UkOil: return(BrentRequest); case TradingViewTiker.Gold: return(GoldRequest); case TradingViewTiker.Voo: return(VooRequest); case TradingViewTiker.Vix: return(VixRequest); case TradingViewTiker.Spx: return(SpxRequest); case TradingViewTiker.Bnd: return(BndRequest); default: return(UsdRubRequest); } }
public static ArraySegment <byte> ToBufferizedRequest(this TradingViewTiker tiker) { var request = tiker.TikerToRequest(); var framed = $"~m~{request.Length}~m~{request}"; var bytes = Encoding.UTF8.GetBytes(framed); return(new ArraySegment <byte>(bytes, 0, bytes.Length)); }
public TradingViewExtractor(TradingViewTiker tiker) { _tiker = tiker; tradingViewUri = new Uri(tradingViewAddress); var encoded = Encoding.UTF8.GetBytes(sessionRequest); buffer = new ArraySegment <byte>(encoded, 0, encoded.Length); ClientWebSocket = new ClientWebSocket(); ClientWebSocket.Options.UseDefaultCredentials = true; ClientWebSocket.Options.SetRequestHeader("Origin", "https://www.tradingview.com"); cts = new CancellationTokenSource(); }