/// <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); } }
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); }
/// <summary> /// Получить данные по инструменту /// </summary> /// <param name="instrument"></param> /// <returns></returns> public InstrumentData GetCGateInstrumentData(Instrument instrument) { return(instrumentConverter.ResolveInstrumentAsync(this, instrument).Result); }
internal async Task <string> ResolveInstrumentAsync(Instrument instrument) { var data = await instrumentConverter.ResolveInstrumentAsync(this, instrument); return(data?.Symbol); }