private void TrySubscribe(Security subscriber, MarketDataMessage message) { //Если уже выполняется поиск данного инструмента, то нет необходимости в повторном вызове OnRegisterXXX. //Если на инструмент была подписка ранее, то просто вызываем событие SubscriptionSucceed. var subscribersCount = GetSubscribers(message.DataType).ChangeSubscribers(subscriber, true); //var securityId = _connector.GetSecurityId(subscriber); if (subscribersCount == 1) { var lookupMessage = new SecurityLookupMessage { SecurityId = message.SecurityId, SecurityType = message.SecurityType, TransactionId = _connector.TransactionIdGenerator.GetNextId() }; _lookupMessages.Add(lookupMessage.TransactionId, Tuple.Create(lookupMessage, (MarketDataMessage)message.Clone())); _connector.LookupSecurities(lookupMessage); } else // if (subscribed == true) { var reply = new MarketDataMessage { OriginalTransactionId = message.TransactionId, IsSubscribe = true, }; _connector.SendOutMessage(reply); } }
private void TrySubscribe(Security subscriber, MarketDataTypes type) { var subscribers = GetSubscribers(type); //Если уже выполняется поиск данного инструмента, то нет необходимости в повторном вызове OnRegisterXXX. //Если на инструмент была подписка ранее, то просто вызываем событие SubscriptionSucceed. bool?subscribed = false; lock (subscribers.SyncRoot) { var value = subscribers.TryGetValue2(subscriber); if (value == null) { subscribers[subscriber] = 0; subscribed = null; } if (value > 0) { subscribers[subscriber] = (int)value + 1; subscribed = true; } } var securityId = _connector.GetSecurityId(subscriber); if (subscribed == null) { var lookupMessage = new SecurityLookupMessage { SecurityId = securityId, SecurityType = subscriber.Type, TransactionId = _connector.TransactionIdGenerator.GetNextId() }; _lookupMessages.Add(lookupMessage.TransactionId, Tuple.Create(lookupMessage, subscriber, type)); _connector.LookupSecurities(lookupMessage); } if (subscribed == true) { _connector.SendOutMessage(new MarketDataMessage { DataType = type, IsSubscribe = true, //SecurityId = securityId, }.FillSecurityInfo(_connector, subscriber)); } }