Esempio n. 1
0
        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));
        }