Example #1
0
        public bool OnCancelBrokerOrder(CreateOrChangeOrder order)
        {
            if (!IsRecovered)
            {
                return(false);
            }
            if (debug)
            {
                log.Debug("OnCancelBrokerOrder " + order + ". Connection " + ConnectionStatus + ", IsOrderServerOnline " + isOrderServerOnline);
            }
            OrderStore.SetSequences(RemoteSequence, FixFactory.LastSequence);
            CreateOrChangeOrder createOrChangeOrder;

            try {
                createOrChangeOrder = OrderStore.GetOrderById(order.OriginalOrder.BrokerOrder);
            } catch (ApplicationException ex) {
                if (LogRecovery || !IsRecovery)
                {
                    log.Info("Order probably already canceled. " + ex.Message);
                }
                if (SyncTicks.Enabled)
                {
                    var tickSync = SyncTicks.GetTickSync(order.Symbol.BinaryIdentifier);
                    tickSync.RemovePhysicalOrder();
                }
                return(true);
            }
            createOrChangeOrder.ReplacedBy = order;
            if (!object.ReferenceEquals(order.OriginalOrder, createOrChangeOrder))
            {
                throw new ApplicationException("Different objects!");
            }

            SendCancelOrder(order, false);
            return(true);
        }