//Method that processes the request or passes it to the next handler public virtual bool DispenseRequest(int amount, ATM currATM, ref int sum_dispense) { if (amount >= Denomination) { var num = GetQuantity(); var remainder = amount; while (remainder >= Denomination && num > 0 && currATM.GetCurrNotesAmount() + 1 <= currATM.GetMaxNotesAmount()) { remainder -= Denomination; num--; } //added sum_dispense += Denomination * (GetQuantity() - num); Quantity -= num; //added if (remainder != 0) { return(next.DispenseRequest(remainder, currATM, ref sum_dispense)); } return(true); } else { return(next.DispenseRequest(amount, currATM, ref sum_dispense)); } }
public void doWithdraw(int amount, CurrencyBill firstHandler, ref int sum_dispense) { while (true) { //sender pass the request to first handler in the pipeline var isDepensible = firstHandler.DispenseRequest(amount, this, ref sum_dispense); if (!isDepensible) { MessageBox.Show($"Failed to dispense ${amount}!"); } } }