public void ProcessOrder() { while (mCurrentPriceCuts < mMaxPriceCuts) { if (mPricingModel.TodaysPrice() <= mLastPrice) { mLastPrice = mPricingModel.TodaysPrice(); foreach (IChickenFarmCallback callback in mSubscribers.Values) { callback.PriceChanged(mPricingModel.TodaysPrice()); } mCurrentPriceCuts++; } Order order = mOrderBuffer.GetOneCell(); ParameterizedThreadStart processOrder = new ParameterizedThreadStart(mOrderProcessing.ProcessOrder); Thread orderProcessingThread = new Thread(processOrder); orderProcessingThread.Start(new object[] { order, mSubscribers[order.SenderId] }); Thread.Sleep(1000); } }
/* * Check credit card number * Calculate total amount of charge (unit price * quantity + tax + shipping) * Send confirmation to retailer */ public void ProcessOrder(object parameters) { object[] boxedParams = (object[])parameters; Order order = (Order)boxedParams[0]; IChickenFarmCallback callBack = (IChickenFarmCallback)boxedParams[1]; ProcessedOrder pOrder; if (validateCreditCard(order.CreditCardNumber)) { pOrder = new ProcessedOrder(true, order, mPricingModel.TodaysPrice()); mPricingModel.AddSale(order.AmountOfChickens); } else { pOrder = new ProcessedOrder(false, order); } callBack.OrderConfirmation(pOrder); }