예제 #1
0
        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
        }
예제 #2
0
        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);
            }
        }
예제 #3
0
        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));
        }
예제 #4
0
        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();
        }