/// <summary> /// Get the current Tradier stream session /// </summary> private TradierStreamSession GetStreamSession() { if (_streamSession == null) { var request = new RestRequest("markets/events/session", Method.POST); _streamSession = Execute <TradierStreamSession>(request, TradierApiRequestType.Data, "stream"); } return(_streamSession); }
/// <summary> /// Get the current market status /// </summary> public TradierStreamSession CreateStreamSession() { var session = new TradierStreamSession(); try { var request = new RestRequest("markets/events/session", Method.POST); session = Execute <TradierStreamSession>(request, TradierApiRequestType.Data, "stream"); } catch (Exception err) { Log.Error("Tradier.Stream(): " + err.Message + ">> " + _previousRequestRaw); } return(session); }
/// <summary> /// Subscribe to the specified configuration /// </summary> /// <param name="dataConfig">defines the parameters to subscribe to a data feed</param> /// <param name="newDataAvailableHandler">handler to be fired on new data available</param> /// <returns>The new enumerator for this subscription request</returns> public IEnumerator <BaseData> Subscribe(SubscriptionDataConfig dataConfig, EventHandler newDataAvailableHandler) { // streaming is not supported by sandbox if (_useSandbox) { throw new NotSupportedException( "TradierBrokerage.DataQueueHandler.Subscribe(): The sandbox does not support data streaming."); } // initialize data queue handler on-demand if (!_isDataQueueHandlerInitialized) { _isDataQueueHandlerInitialized = true; _streamSession = CreateStreamSession(); using (var resetEvent = new ManualResetEvent(false)) { EventHandler triggerEvent = (o, args) => resetEvent.Set(); _webSocketClient.Open += triggerEvent; _webSocketClient.Connect(); if (!resetEvent.WaitOne(ConnectionTimeout)) { throw new TimeoutException("Websockets connection timeout."); } _webSocketClient.Open -= triggerEvent; } } if (!CanSubscribe(dataConfig.Symbol)) { return(Enumerable.Empty <BaseData>().GetEnumerator()); } var enumerator = _aggregator.Add(dataConfig, newDataAvailableHandler); _subscriptionManager.Subscribe(dataConfig); return(enumerator); }