Esempio n. 1
0
        /// <summary>
        ///     Подписаться на инструмент.
        /// </summary>
        /// <param name="instrument">
        ///     Инструмент для подписки.
        /// </param>
        public async Task <SubscriptionResult> Subscribe(Instrument instrument)
        {
            using (LogManager.Scope())
            {
                var data = await instrumentConverter.ResolveInstrumentAsync(this, instrument);

                if (data == null)
                {
                    return(SubscriptionResult.Error(instrument, $"Unable to resolve symbol for {instrument}"));
                }

                // Забираем подписку из коллекции или создаем новую
                InstrumentSubscription subscription;
                bool isNewSubscription;
                using (instrumentSubscriptionsLock.Lock())
                {
                    if (instrumentSubscriptionsByInstrument.TryGetValue(instrument, out subscription))
                    {
                        isNewSubscription = false;
                    }
                    else
                    {
                        subscription = new InstrumentSubscription(instrument, data, OnInstrumentSubscriptionTimedOut);
                        instrumentSubscriptionsByInstrument.Add(instrument, subscription);

                        instrumentSubscriptionsByCode[subscription.Code] = subscription;
                        isNewSubscription = true;
                    }
                }

                if (isNewSubscription)
                {
                    // Если подписка уже существовала, то ничего не делаем
                    // В противном случае требуется подписаться

                    // Подписываемся
                    socketL1.Subscribe(subscription.Code);
                    subscription.BeginTimeout();
                }

                return(await subscription.Task);
            }
        }
Esempio n. 2
0
        private async Task <Contract> ResolveContractStubAsync(Instrument instrument)
        {
            var instrumentData = await instrumentConverter.ResolveInstrumentAsync(adapter, instrument);

            if (instrumentData == null)
            {
                _Log.Error().Print("Unable to resolve vendor symbol for an instrument",
                                   LogFields.Instrument(instrument));
                return(null);
            }

            var contract = GetContractStub(instrumentData);

            return(contract);
        }
Esempio n. 3
0
 /// <summary>
 /// Получить данные по инструменту
 /// </summary>
 /// <param name="instrument"></param>
 /// <returns></returns>
 public InstrumentData GetCGateInstrumentData(Instrument instrument)
 {
     return(instrumentConverter.ResolveInstrumentAsync(this, instrument).Result);
 }
Esempio n. 4
0
        internal async Task <string> ResolveInstrumentAsync(Instrument instrument)
        {
            var data = await instrumentConverter.ResolveInstrumentAsync(this, instrument);

            return(data?.Symbol);
        }