Example #1
0
        private void HandlerOrder(Order order, Action onSuccess, Action <string> onFailure)
        {
            var validation = ValidateOrder(order);

            if (!validation.IsValid)
            {
                onFailure?.Invoke(validation.Reason);
                return;
            }

            var bestBidPrice = _orderStore.BestBid;
            var bestAskPrice = _orderStore.BestAsk;

            // Accept bid (buy) and ask (sell) orders of a specified quantity and price for 1 stock
            var tradingOrder = TradingOrder.New(order);

            _orderStore.Add(tradingOrder);
            onSuccess?.Invoke();

            // Publishes an event when an order has been accepted (not necessarily matched)
            NotifyOrderPlaced(order);

            // Find if any matched, Publishes an event when a bid order has been settled with a matching ask order, partially or otherwise
            ResolveMatching(tradingOrder);

            // Publishes an event when the best bid and ask price changes
            if (IsPriceChanging(bestBidPrice, bestAskPrice))
            {
                NotifyPriceChanged();
            }
        }