private Yield SendTickToQueue()
        {
            try {
                SymbolQueue inputQueue = symbolQueues[nextQueue];
                if (!inputQueue.Receive(ref tick))
                {
                    return(Yield.NoWork.Repeat);
                }

                inputQueue.NextTick        = tick;
                inputQueue.NextTick.Symbol = inputQueue.Symbol.BinaryIdentifier;
                return(Yield.DidWork.Invoke(Process));
            } catch (QueueException ex) {
                if (ex.EntryType == EventType.EndHistorical)
                {
                    symbolQueues.RemoveAt(nextQueue);
                    if (symbolQueues.Count <= 0)
                    {
                        if (!receiver.OnEvent(null, (int)EventType.Terminate, null))
                        {
                            throw new ApplicationException("Can't send Terminate.");
                        }
                        Factory.Parallel.CurrentTask.Stop();
                    }
                }
                else
                {
                    throw new ApplicationException("Queue returned invalid entry type: " + ex.EntryType, ex);
                }
            }
            return(Yield.NoWork.Repeat);
        }
        public void Add(SymbolInfo symbol, Provider provider, TimeStamp lastTime)
        {
            if (debug)
            {
                log.Debug("Add(" + symbol + "," + provider + ")");
            }
            SymbolQueue sq = new SymbolQueue(symbol, provider, lastTime);

            this.symbolQueues.Add(sq);
        }
 private void ProcessStartup()
 {
     for (int i = 0; i < symbolQueues.Count; i++)
     {
         log.Notice("Initializing Symbol Input Queue for " + symbolQueues[i].Symbol);
         SymbolQueue symbolQueue = symbolQueues[i];
         symbolQueue.Receive(ref tick);
         symbolQueue.NextTick        = tick;
         symbolQueue.NextTick.Symbol = symbolQueue.Symbol.BinaryIdentifier;
         if (debug)
         {
             log.Debug("Initial tick has symbol '" + symbolQueue.NextTick.Symbol + "'");
         }
     }
     if (!receiver.OnEvent(null, (int)EventType.StartRealTime, null))
     {
         throw new ApplicationException("Can't send StartRealTime.");
     }
 }