public ConfirmResult Confirm(int instrumentId, int confirmId, bool accepted) { ConfirmResult confirmResult = new ConfirmResult() { Confirmed = false }; AbnormalInstrument abnormalInstrument; if (this._AbnormalInstruments.TryGetValue(instrumentId, out abnormalInstrument)) { abnormalInstrument.Confirm(confirmId, accepted, confirmResult); } else { Logger.AddEvent(TraceEventType.Warning, "AbnormalQuotationManager.Confirm Cannot find wait queue for instrumentId={0}", instrumentId); } return confirmResult; }
public void Confirm(int confirmId, bool accepted, ConfirmResult confirmResult) { this._TimeoutCount = 0; lock (this._WaitQueue) { if (this._WaitQueue.Any(q => q.ConfirmId == confirmId)) { while (this._WaitQueue.Peek().ConfirmId != confirmId) { // Discard quotations before ConfirmId == confirmId this._WaitQueue.Dequeue(); } SourceQuotation confirmedQuotation = this._WaitQueue.Dequeue(); MainService.ExchangeManager.SwitchPriceEnableState(confirmedQuotation.InstrumentId, true); if (accepted) { MainService.QuotationManager.ProcessNormalQuotation(confirmedQuotation); } confirmResult.Confirmed = true; confirmResult.SourceQuotation = confirmedQuotation; this.ProcessSubsequentQuotation(); Logger.AddEvent(TraceEventType.Information, "[AbnormalInstrument.Confirm] Confirmed. confirmId:{0}, accepted:{1}", confirmId, accepted); } else { // quotation already timeout, do nothing. Logger.AddEvent(TraceEventType.Information, "[AbnormalInstrument.Confirm] quotation already timeout, do nothing. confirmId:{0}, accepted:{1}", confirmId, accepted); } } }