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 MarketDataMessage ProcessMarketDataRequest(MarketDataMessage message) { if (message.IsSubscribe) { if (message.SecurityId == default || !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.DataType2)) { var builder = message.DepthBuilder ?? InnerAdapter.CreateOrderLogMarketDepthBuilder(message.SecurityId); _subscriptionIds.Add(message.TransactionId, new SubscriptionInfo(message.TypedClone()) { Builder = builder }); message = message.TypedClone(); message.DataType2 = DataType.OrderLog; this.AddInfoLog("OL->MD subscribed {0}/{1}.", message.SecurityId, message.TransactionId); } } else if (message.DataType2 == DataType.Ticks) { if (isBuild || !InnerAdapter.IsMarketDataTypeSupported(message.DataType2)) { _subscriptionIds.Add(message.TransactionId, new SubscriptionInfo(message.TypedClone())); message = message.TypedClone(); message.DataType2 = DataType.OrderLog; this.AddInfoLog("OL->TICK subscribed {0}/{1}.", message.SecurityId, message.TransactionId); } } } else { TryRemoveSubscription(message.OriginalTransactionId, out _); } return(message); }
private MarketDataMessage ProcessMarketDataRequest(MarketDataMessage message) { if (message.IsSubscribe) { if (!InnerAdapter.IsMarketDataTypeSupported(MarketDataTypes.OrderLog)) { return(message); } var isBuild = message.BuildMode == MarketDataBuildModes.Build && message.BuildFrom == MarketDataTypes.OrderLog; switch (message.DataType) { case MarketDataTypes.MarketDepth: { if (isBuild || !InnerAdapter.IsMarketDataTypeSupported(message.DataType)) { 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.DataType)) { 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 { var tuple = _subscriptionIds.TryGetAndRemove(message.OriginalTransactionId); if (tuple != null) { this.AddInfoLog("OL->{0} unsubscribed {1}/{2}.", tuple.Second ? "MD" : "TICK", tuple.First, message.OriginalTransactionId); } } return(message); }
IOrderLogMarketDepthBuilder IMessageAdapter.CreateOrderLogMarketDepthBuilder(SecurityId securityId) { return(InnerAdapter.CreateOrderLogMarketDepthBuilder(securityId)); }
private bool ProcessMarketDataRequest(MarketDataMessage message) { if (message.IsSubscribe) { if (!InnerAdapter.IsMarketDataTypeSupported(MarketDataTypes.OrderLog)) { return(false); } var isBuild = message.BuildMode == MarketDataBuildModes.Build && message.BuildFrom == MarketDataTypes.OrderLog; switch (message.DataType) { case MarketDataTypes.MarketDepth: { if (isBuild || !InnerAdapter.IsMarketDataTypeSupported(message.DataType)) { var secId = GetSecurityId(message.SecurityId); if (InnerAdapter.IsSupportSubscriptionBySecurity) { _depthBuilders.Add(secId, InnerAdapter.CreateOrderLogMarketDepthBuilder(secId)); } else { _depthBuilders.TryAdd(secId, (IOrderLogMarketDepthBuilder)null); } _subscriptionIds.Add(message.TransactionId, Tuple.Create(secId, message.DataType)); var clone = (MarketDataMessage)message.Clone(); clone.DataType = MarketDataTypes.OrderLog; base.SendInMessage(clone); this.AddInfoLog("OL->MD subscribed {0}.", secId); return(true); } break; } case MarketDataTypes.Trades: { if (isBuild || !InnerAdapter.IsMarketDataTypeSupported(message.DataType)) { var secId = GetSecurityId(message.SecurityId); _tickBuilders.Add(secId); _subscriptionIds.Add(message.TransactionId, Tuple.Create(secId, message.DataType)); var clone = (MarketDataMessage)message.Clone(); clone.DataType = MarketDataTypes.OrderLog; base.SendInMessage(clone); this.AddInfoLog("OL->TICK subscribed {0}.", secId); return(true); } break; } } } else { if (!_subscriptionIds.TryGetValue(message.OriginalTransactionId, out var tuple)) { return(false); } var secId = tuple.Item1; if (tuple.Item2 == MarketDataTypes.MarketDepth) { _depthBuilders.Remove(secId); this.AddInfoLog("OL->MD unsubscribed {0}.", secId); } else { _tickBuilders.Remove(secId); this.AddInfoLog("OL->TICK unsubscribed {0}.", secId); } } return(false); }