//
/* * Example ATM simulation - file session.cc * * This file implements the class that represents a single customer session * with the ATM, declared in session.h * * Copyright (c) 1996 - Russell C. Bjork * */ #include "sysdep.h" #include "bank.h" #include "session.h" #include "transaction.h" #include "atm.h" //
Session::Session(int cardNumber)
  : _state(RUNNING),
    _cardNumber(cardNumber)
  { }
//
void Session::doSessionUseCase()
  {
    _PIN = theATM.getPIN();
    do
      {
	_currentTransaction = 
	    Transaction::makeTransaction(theATM.getTransactionChoice(), * this);
	_currentTransaction -> doTransactionUseCase();
	delete _currentTransaction;
      }
    while (_state == RUNNING && theATM.getDoAnotherTransactionChoice());
    if (_state != ABORTED) 
	theATM.ejectCard();
  }
//
Bank::ApprovalCode Session::doInvalidPINExtension()
  { 
    Bank::ApprovalCode code;
    for (int i = 0; i < 3; i ++)
      { _PIN = theATM.reEnterPIN();
	code = _currentTransaction -> sendToBank();     
	if (code != Bank::INVALID_PIN)
	    return code;
      }
    theATM.retainCard();
    _state = ABORTED;
  }
//
int Session::cardNumber() const
  { return _cardNumber; }
//
int Session::PIN() const
  { return _PIN; }
//