/* * QUANTCONNECT.COM - Democratizing Finance, Empowering Individuals. * Lean Algorithmic Trading Engine v2.0. Copyright 2014 QuantConnect Corporation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ using System; using System.Collections.Generic; using System.Linq; using QuantConnect.Logging; namespace QuantConnect.Data { /// /// Overrides methods using events /// public class EventBasedDataQueueHandlerSubscriptionManager : DataQueueHandlerSubscriptionManager { /// /// Creates an instance of with a single channel name /// public EventBasedDataQueueHandlerSubscriptionManager() : this(t => Channel.Single) {} /// /// Creates an instance of /// /// Convert TickType into string public EventBasedDataQueueHandlerSubscriptionManager(Func getChannelName) { _getChannelName = getChannelName; } /// /// Subscription method implementation /// public Func, TickType, bool> SubscribeImpl { get; set; } /// /// Unsubscription method implementation /// public Func, TickType, bool> UnsubscribeImpl { get; set; } /// /// Socket channel name /// private Func _getChannelName; /// /// The way Brokerage subscribes to symbol tickers /// /// Symbols to subscribe /// Type of tick data /// protected override bool Subscribe(IEnumerable symbols, TickType tickType) { Log.Trace("EventBasedDataQueueHandlerSubscriptionManager.Subscribe(): {0}", string.Join(",", symbols.Select(x => x.Value))); return SubscribeImpl?.Invoke(symbols, tickType) == true; } /// /// The way Brokerage unsubscribes from symbol tickers /// /// Symbols to unsubscribe /// Type of tick data /// protected override bool Unsubscribe(IEnumerable symbols, TickType tickType) { Log.Trace("EventBasedDataQueueHandlerSubscriptionManager.Unsubscribe(): {0}", string.Join(",", symbols.Select(x => x.Value))); return UnsubscribeImpl?.Invoke(symbols, tickType) == true; } /// /// Channel name /// /// Type of tick data /// Returns Socket channel name corresponding protected override string ChannelNameFromTickType(TickType tickType) { return _getChannelName?.Invoke(tickType); } } }