private void TrySubscribe(Security subscriber, MarketDataTypes type) { //Если уже выполняется поиск данного инструмента, то нет необходимости в повторном вызове OnRegisterXXX. //Если на инструмент была подписка ранее, то просто вызываем событие SubscriptionSucceed. var subscribersCount = GetSubscribers(type).ChangeSubscribers(subscriber, true); var securityId = _connector.GetSecurityId(subscriber); if (subscribersCount == 1) { 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); } else // if (subscribed == true) { _connector.SendOutMessage(new MarketDataMessage { DataType = type, IsSubscribe = true, //SecurityId = securityId, }.FillSecurityInfo(_connector, subscriber)); } }
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)); } }