Esempio n. 1
0
        //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));
            }
        }
Esempio n. 2
0
File: ATM.cs Progetto: cdrann/ATM
        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}!");
                }
            }
        }