private void ProcessMarketDataMessage(MarketDataMessage msg) { if (msg.IsSubscribe) { if (msg.IsBack) { if (_seriesInfosByTransactions.ContainsKey(msg.TransactionId)) { base.SendInMessage(msg); return; } } var info = new SeriesInfo { MarketDataMessage = (MarketDataMessage)msg.Clone(), LastTime = msg.From, Board = !msg.SecurityId.BoardCode.IsEmpty() ? _exchangeInfoProvider.GetOrCreateBoard(msg.SecurityId.BoardCode) : ExchangeBoard.Test }; _seriesInfos .SafeAdd(msg.SecurityId) .Add(info); _seriesInfosByDates .Add(new KeyValuePair <DateTimeOffset, SeriesInfo>(msg.To ?? DateTimeOffset.MaxValue, info)); _series .SafeAdd(Tuple.Create(msg.SecurityId, msg.DataType, msg.Arg)) .Add(info); Subscribe(info, false); } else { var subscriptions = _seriesInfos.TryGetValue(msg.SecurityId); if (subscriptions == null) { return; } var removed = subscriptions.RemoveWhere(s => s.MarketDataMessage.TransactionId == msg.OriginalTransactionId); foreach (var info in removed) { UnSubscribe(info, false); } } }
/// <summary> /// To send data request. /// </summary> /// <param name="series">The candles series for which data receiving should be started.</param> /// <param name="from">The initial date from which you need to get data.</param> /// <param name="to">The final date by which you need to get data.</param> public override void Start(CandleSeries series, DateTimeOffset from, DateTimeOffset to) { if (series == null) { throw new ArgumentNullException(nameof(series)); } bool registerSecurity; series.IsNew = true; _registeredSeries.SafeAdd(series.Security, out registerSecurity).Add(series); if (registerSecurity) { RegisterSecurity(series.Security); } _seriesByDates.Add(new KeyValuePair <DateTimeOffset, CandleSeries>(to, series)); }