private void FIXCancelOrder(MessageFIX4_2 packet) { var symbol = Factory.Symbol.LookupSymbol(packet.Symbol); if (!ProviderSimulator.IsOrderServerOnline) { throw new LimeException("Order server offline testing for Lime not yet implemeneted"); if (debug) { log.Debug(symbol + ": Cannot cancel order by client id: " + packet.OriginalClientOrderId + ". Order Server Offline."); } OnRejectCancel(packet.Symbol, packet.ClientOrderId, packet.OriginalClientOrderId, symbol + ": Order Server Offline"); return; } var simulator = simulators[SimulatorType.RejectSymbol]; if (FixFactory != null && simulator.CheckFrequencyAndSymbol(symbol)) { if (debug) { log.Debug("Simulating cancel order reject of 35=" + packet.MessageType); } OnRejectCancel(packet.Symbol, packet.ClientOrderId, packet.OriginalClientOrderId, "Testing reject of cancel order."); return; } simulator = simulators[SimulatorType.ServerOfflineReject]; if (FixFactory != null && simulator.CheckFrequency()) { throw new LimeException("Order server offline testing for Lime not yet implemeneted"); if (debug) { log.Debug("Simulating order server offline business reject of 35=" + packet.MessageType); } OnBusinessRejectOrder(packet.ClientOrderId, "Server offline for cancel order."); ProviderSimulator.SwitchBrokerState("offline", false); ProviderSimulator.SetOrderServerOffline(); return; } if (debug) { log.Debug("FIXCancelOrder() for " + packet.Symbol + ". Original client id: " + packet.OriginalClientOrderId); } CreateOrChangeOrder origOrder = null; try { long origClientId; if (!long.TryParse(packet.OriginalClientOrderId, out origClientId)) { log.Error("original client order id " + packet.OriginalClientOrderId + " cannot be converted to long: " + packet); origClientId = 0; } origOrder = ProviderSimulator.GetOrderById(symbol, origClientId); } catch (ApplicationException) { if (debug) { log.Debug(symbol + ": Cannot cancel order by client id: " + packet.OriginalClientOrderId + ". Probably already filled or canceled."); } OnRejectCancel(packet.Symbol, packet.ClientOrderId, packet.OriginalClientOrderId, "No such order"); return; } var cancelOrder = ConstructCancelOrder(packet, packet.ClientOrderId); cancelOrder.OriginalOrder = origOrder; ProviderSimulator.CancelOrder(cancelOrder); ProcessCancelOrder(cancelOrder); ProviderSimulator.TryProcessAdustments(cancelOrder); return; }
private void FIXChangeOrder(MessageFIX4_2 packet) { var symbol = Factory.Symbol.LookupSymbol(packet.Symbol); var order = ConstructOrder(packet, packet.ClientOrderId); if (!ProviderSimulator.IsOrderServerOnline) { throw new LimeException("Order server offline testing for Lime not yet implemeneted"); log.Info(symbol + ": Rejected " + packet.ClientOrderId + ". Order server offline."); OnRejectOrder(order, symbol + ": Order Server Offline."); return; } var simulator = simulators[SimulatorType.RejectSymbol]; if (FixFactory != null && simulator.CheckFrequencyAndSymbol(symbol)) { if (debug) { log.Debug("Simulating create order reject of 35=" + packet.MessageType); } OnRejectOrder(order, "Testing reject of change order."); return; } simulator = simulators[SimulatorType.ServerOfflineReject]; if (FixFactory != null && simulator.CheckFrequency()) { throw new LimeException("Order server offline testing for Lime not yet implemeneted"); if (debug) { log.Debug("Simulating order server offline business reject of 35=" + packet.MessageType); } OnBusinessRejectOrder(packet.ClientOrderId, "Server offline for change order."); ProviderSimulator.SwitchBrokerState("offline", false); ProviderSimulator.SetOrderServerOffline(); return; } CreateOrChangeOrder origOrder = null; if (debug) { log.Debug("FIXChangeOrder() for " + packet.Symbol + ". Client id: " + packet.ClientOrderId + ". Original client id: " + packet.OriginalClientOrderId); } try { long origClientId; if (!long.TryParse(packet.OriginalClientOrderId, out origClientId)) { log.Error("original client order id " + packet.OriginalClientOrderId + " cannot be converted to long: " + packet); origClientId = 0; } origOrder = ProviderSimulator.GetOrderById(symbol, origClientId); } catch (ApplicationException ex) { if (debug) { log.Debug(symbol + ": Rejected " + packet.ClientOrderId + ". Cannot change order: " + packet.OriginalClientOrderId + ". Already filled or canceled. Message: " + ex.Message); } OnRejectOrder(order, symbol + ": Cannot change order. Probably already filled or canceled."); return; } order.OriginalOrder = origOrder; #if VERIFYSIDE if (order.Side != origOrder.Side) { var message = symbol + ": Cannot change " + origOrder.Side + " to " + order.Side; log.Error(message); OnRejectOrder(order, false, message); return; } if (order.Type != origOrder.Type) { var message = symbol + ": Cannot change " + origOrder.Type + " to " + order.Type; log.Error(message); OnRejectOrder(order, false, message); return; } #endif ProviderSimulator.ChangeOrder(order); ProcessChangeOrder(order); }