Example #1
0
        /// <summary>
        /// Get available ticks, base implementation
        /// </summary>
        /// <returns></returns>
        public virtual IEnumerable <DataFeedPacket> GetAvailableDataPackets()
        {
            //Default values
            DateTime time     = DateTime.MinValue;
            TimeSpan timespan = TimeSpan.FromMilliseconds(10); //Combine all data from the last 10 milliseconds
            Dictionary <TickerSymbol, DataFeedPacket> datapackets = new Dictionary <TickerSymbol, DataFeedPacket>();

            //Check for new data
            while (CurrenDatapoints.Count > 0)
            {
                if (CurrenDatapoints.TryPeek(out DataPoint item))
                {
                    //Get current moment in time
                    if (time == DateTime.MinValue)
                    {
                        time = item.OccuredUtc + timespan;
                    }
                    else if (time < item.OccuredUtc)
                    {
                        break;                  //Not the same timespan
                    }
                    //Get item
                    if (CurrenDatapoints.TryDequeue(out item))
                    {
                        //Get security
                        Security security;
                        if (Securities != null)
                        {
                            security = Securities[item.Ticker];
                            if (security is UnknownSecurity)
                            {
                                _log.Warn($"Received unknown security with ticker {security.Ticker}");
                                continue;
                            }
                        }
                        else
                        {
                            security = new UnknownSecurity(item.Ticker.Name);
                        }

                        //Check if we are allowed to accept this data point
                        if (!DataFilter.Accept(security, item))
                        {
                            continue;
                        }

                        //Get data
                        LastDataReceivedUtc = item.OccuredUtc;
                        if (datapackets.TryGetValue(item.Ticker, out DataFeedPacket packet))
                        {
                            packet.Add(item);
                        }
                        else
                        {
                            datapackets.Add(item.Ticker, new DataFeedPacket(security, DataSubscriptionManager?.GetDataSubscriptions(item.Ticker, item.DataType), item));
                        }
                    }
                }
                else
                {
                    break;                      //No items
                }
            }

            //Wait for new data if we do not have any
            if (datapackets.Count == 0)
            {
                Thread.Sleep(_waittimeinms);
            }

            //Return what we have
            return(datapackets.Values);
        }