private Yield DequeueTick() { var result = Yield.NoWork.Repeat; var binary = new TickBinary(); try { if (reader.ReadQueue.TryDequeue(ref binary)) { if (isPlayBack) { if (isFirstTick) { playbackOffset = fixSimulatorSupport.GetRealTimeOffset(binary.UtcTime); } binary.UtcTime += playbackOffset; } nextTick.Inject(binary); tickSync.AddTick(); if (isFirstTick) { fillSimulator.StartTick(nextTick); isFirstTick = false; } else { fillSimulator.ProcessOrders(); } result = Yield.DidWork.Invoke(ProcessTick); } } catch (QueueException ex) { if (ex.EntryType != EventType.EndHistorical) { throw; } } return(result); }
private void DequeueTick() { LatencyManager.IncrementSymbolHandler(); if (!reader.TryReadTick(temporaryTick)) { if (onEndTick == null) { throw new ApplicationException("OnEndTick was null"); } onEndTick(id); endOfTickData = true; queueTask.Resume(); if (debug) { log.Debug("End Of Tick Data."); } return; } tickCounter++; if (isFirstTick) { currentTick.Inject(temporaryTick.Extract()); } else { currentTick.Inject(nextTick.Extract()); } isFirstTick = false; FillSimulator.StartTick(currentTick); nextTick.Inject(temporaryTick.Extract()); tickSync.AddTick(nextTick); if (trace) { log.Trace("Dequeue tick " + nextTick.UtcTime + "." + nextTick.UtcTime.Microsecond); } ProcessOnTickCallBack(); }