private MarketDataMessage ProcessMarketDataRequest(MarketDataMessage message) { if (message.IsSubscribe) { if (!InnerAdapter.IsMarketDataTypeSupported(DataType.OrderLog)) { return(message); } var isBuild = message.BuildMode == MarketDataBuildModes.Build && message.BuildFrom == DataType.OrderLog; if (message.DataType2 == DataType.MarketDepth) { if (isBuild || !InnerAdapter.IsMarketDataTypeSupported(message.ToDataType())) { var secId = GetSecurityId(message.SecurityId); IOrderLogMarketDepthBuilder builder = null; if (InnerAdapter.IsSecurityRequired(DataType.OrderLog)) { builder = message.DepthBuilder ?? InnerAdapter.CreateOrderLogMarketDepthBuilder(secId); } _subscriptionIds.Add(message.TransactionId, RefTuple.Create(true, builder, new SyncObject())); message = message.TypedClone(); message.DataType2 = DataType.OrderLog; this.AddInfoLog("OL->MD subscribed {0}/{1}.", secId, message.TransactionId); } } else if (message.DataType2 == DataType.Ticks) { if (isBuild || !InnerAdapter.IsMarketDataTypeSupported(message.ToDataType())) { var secId = GetSecurityId(message.SecurityId); _subscriptionIds.Add(message.TransactionId, RefTuple.Create(false, (IOrderLogMarketDepthBuilder)null, new SyncObject())); message = message.TypedClone(); message.DataType2 = DataType.OrderLog; this.AddInfoLog("OL->TICK subscribed {0}/{1}.", secId, message.TransactionId); } } } else { RemoveSubscription(message.OriginalTransactionId); } return(message); }
private void ProcessInMarketDataMessage(MarketDataMessage message) { var dataType = message.ToDataType(); var secId = GetSecurityId(dataType, message.SecurityId); ProcessInSubscriptionMessage(message, dataType, secId); }
/// <inheritdoc /> public void UnSubscribeMarketData(Security security, MarketDataMessage message) { if (message == null) { throw new ArgumentNullException(nameof(message)); } var subscription = _subscriptionManager.TryFindSubscription(0, message.ToDataType(), security); if (subscription != null) { UnSubscribe(subscription); } }
private MarketDataMessage ProcessMarketDataRequest(MarketDataMessage message) { if (message.IsSubscribe) { if (!InnerAdapter.IsMarketDataTypeSupported(DataType.OrderLog)) { return(message); } var isBuild = message.BuildMode == MarketDataBuildModes.Build && message.BuildFrom == MarketDataTypes.OrderLog; switch (message.DataType) { case MarketDataTypes.MarketDepth: { if (isBuild || !InnerAdapter.IsMarketDataTypeSupported(message.ToDataType())) { var secId = GetSecurityId(message.SecurityId); IOrderLogMarketDepthBuilder builder = null; if (InnerAdapter.IsSecurityRequired(DataType.OrderLog)) { builder = InnerAdapter.CreateOrderLogMarketDepthBuilder(secId); } _subscriptionIds.Add(message.TransactionId, RefTuple.Create(secId, true, builder)); message = (MarketDataMessage)message.Clone(); message.DataType = MarketDataTypes.OrderLog; this.AddInfoLog("OL->MD subscribed {0}/{1}.", secId, message.TransactionId); } break; } case MarketDataTypes.Trades: { if (isBuild || !InnerAdapter.IsMarketDataTypeSupported(message.ToDataType())) { var secId = GetSecurityId(message.SecurityId); _subscriptionIds.Add(message.TransactionId, RefTuple.Create(secId, false, (IOrderLogMarketDepthBuilder)null)); message = (MarketDataMessage)message.Clone(); message.DataType = MarketDataTypes.OrderLog; this.AddInfoLog("OL->TICK subscribed {0}/{1}.", secId, message.TransactionId); } break; } } } else { RemoveSubscription(message.OriginalTransactionId); } return(message); }