1  #ifndef CONNECTION_H
  2  #define CONNECTION_H
  3  
  4  using namespace std;
  5  
  6  #include "mailsystem.h"
  7  #include "telephone.h"
  8  #include "mailbox.h"
  9  
 10  /**
 11     Connects a phone to the voice mail system. 
 12     The purpose of this class is to keep track 
 13     of the state of a connection, because the phone 
 14     itself is only the source of individual key presses.
 15  */
 16  class Connection
 17  {
 18  public:
 19     /**
 20        Construct a Connection object
 21        @param s a MailSystemn object
 22        @param p a Telephone object
 23     */
 24     Connection(MailSystem& s, Telephone& p);
 25  
 26     /**
 27        Respond to the user's pressing a key
 28        on the phone touchpad.
 29        @param key the phone key pressed by the user
 30     */
 31     void dial(string key);
 32  
 33     /**
 34        Record voice
 35        @param voice voice spoken by the user
 36     */
 37     void record(string voice);
 38  
 39     /**
 40        The user hangs up the phone.
 41     */
 42     void hangup();
 43  
 44  private:
 45     /**
 46        Reset the connection to the initial state 
 47        and prompt for mailbox number
 48     */
 49     void reset_connection();
 50  
 51     /**
 52        Try to connect the user with the specified mailbox
 53        @param key the phone key pressed by the user
 54     */
 55     void connect(string key);
 56  
 57     /**
 58        Try to log in the user
 59        @param key the phone key pressed by the user
 60     */
 61     void login(string key);
 62  
 63     /**
 64        Change passcode
 65        @param key the phone key pressed by the user
 66     */
 67     void change_passcode(string key);
 68  
 69     /**
 70        Change greeting.
 71        @param key the phone key presed by the user
 72     */
 73     void change_greeting(string key);
 74  
 75     /**
 76        Respond to the users selection from mailbox menu
 77        @param key the phone key pressed by the user
 78     */
 79     void mailbox_menu(string key);
 80  
 81     /**
 82        Respond to the user's selection from message menu
 83        @param key the phone key pressed by the user
 84     */
 85     void message_menu(string key);
 86  
 87     MailSystem& system;
 88     Mailbox* current_mailbox;
 89     string current_recording;
 90     string accumulated_keys;
 91     Telephone& phone;
 92  
 93     enum states {DISCONNECTED, CONNECTED, RECORDING, 
 94        MAILBOX_MENU, MESSAGE_MENU, 
 95        CHANGE_PASSCODE, CHANGE_GREETING};
 96     enum states state;
 97  
 98     const string INITIAL_PROMPT;
 99     const string MAILBOX_MENU_TEXT;
100     const string MESSAGE_MENU_TEXT;
101  };
102  
103  #endif