public OrderMatcher(OrderRequest orderRequest, EffectProcessorsContainer effectsContainer) { resultEffects = effectsContainer; takerOrder = new Order { OrderId = OrderIdConverter.FromRequest(orderRequest, effectsContainer.Apex), AccountWrapper = orderRequest.AccountWrapper, Amount = orderRequest.Amount, Price = orderRequest.Price }; timeInForce = orderRequest.TimeInForce; //parse data from the ID of the newly arrived order var orderData = OrderIdConverter.Decode(takerOrder.OrderId); asset = orderData.Asset; side = orderData.Side; //get asset orderbook market = effectsContainer.Context.Exchange.GetMarket(asset); orderbook = market.GetOrderbook(side.Inverse()); //fetch balances if (!takerOrder.AccountWrapper.Account.HasBalance(asset)) { resultEffects.AddBalanceCreate(orderRequest.AccountWrapper, asset); } }
/// <summary> /// Sends envelope and all effects to specified callback /// </summary> public void Complete() { //TODO: find more elegant way to handle this scenario //we mustn't save orders that were closed immediately without adding to order-book if (Quantum is RequestQuantum request && request.RequestMessage is OrderRequest orderRequest && !OrderWasPlaced) { PendingDiffObject.Orders.Remove(OrderIdConverter.FromRequest(orderRequest, Quantum.Apex)); } QuantumModel.Complete(QuantumModelExtensions.FromQuantum(Envelope)); PendingDiffObject.Quanta.Add(QuantumModel); }