Exemplo n.º 1
0
            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);
                }
            }
Exemplo n.º 2
0
            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));
                }
            }