protected void ProcessOrderCancelRequest(QuickFix.SessionID session, QuickFix.Fields.ClOrdID clordid, QuickFix.Fields.OrigClOrdID origordid , bool is_cancelreplace_request, int new_qty, double new_px, double new_stop_px) { IOrder order = null; try { // order exists ? OrderFixBridge order_bridge; lock (locker_) order_bridge = m_orders.AddOrGet(null, origordid.getValue(), session); if (order_bridge.Order == null) { RejectCancelRequest(session, clordid, origordid, null, "Unknown order !", QuickFix.Fields.CxlRejReason.UNKNOWN_ORDER, true); return; } order = order_bridge.Order; switch (order.OrderState) { // order is still alive, go ahead case OrderState.Accepted: case OrderState.PartFilled: case OrderState.Working: if (is_cancelreplace_request) { QuickFixStaticAcceptor.FromFIX_ChangeOrder(order, new_qty, new_px, new_stop_px); } else { QuickFixStaticAcceptor.FromFIX_CancelOrder(order); } return; // pending case OrderState.PendingChange: //VV? case OrderState.PendingSubmit: //VV? case OrderState.PendingCancel: //VV? { string error_message = "Invalid cancel or cancel/replace request since order " + origordid.getValue() + " is in pending state : " + order.OrderState.ToString(); RejectCancelRequest(session, clordid, origordid, order, error_message, QuickFix.Fields.CxlRejReason.ALREADY_PENDING, is_cancelreplace_request); return; } // terminal state case OrderState.Cancelled: case OrderState.Filled: case OrderState.Rejected: { string error_message = "Invalid cancel or cancel/replace request since order " + origordid.getValue() + " is in terminal/closed state : " + order.OrderState.ToString(); RejectCancelRequest(session, clordid, origordid, order, error_message, QuickFix.Fields.CxlRejReason.TOO_LATE_TO_CANCEL, is_cancelreplace_request); return; } case OrderState.Unknown: { string error_message = "Invalid cancel or cancel/replace request since order " + origordid.getValue() + " is in unknow NT7 state : " + order.OrderState.ToString(); RejectCancelRequest(session, clordid, origordid, order, error_message, QuickFix.Fields.CxlRejReason.OTHER, is_cancelreplace_request); return; } } } catch (Exception e) { RejectCancelRequest(session, clordid, origordid, order, "ProcessOrderCancelRequest : internal Error : " + e.ToString() , QuickFix.Fields.CxlRejReason.OTHER, is_cancelreplace_request); } }