📄 connection.cpp
字号:
#include "message.h"
#include "mailbox.h"
#include "mailsystem.h"
#include "connection.h"
#include "telephone.h"
Connection::Connection(MailSystem& s, Telephone& p)
: system(s), phone(p),
INITIAL_PROMPT("Enter mailbox number followed by #\n"),
MAILBOX_MENU_TEXT("Enter 1 to listen to your messages\n"
"Enter 2 to change your passcode\n"
"Enter 3 to change your greeting\n"),
MESSAGE_MENU_TEXT("Enter 1 to listen to the current message\n"
"Enter 2 to save the current message\n"
"Enter 3 to delete the current message\n"
"Enter 4 to return to the main menu\n")
{
reset_connection();
}
void Connection::dial(string key)
{
if (state == CONNECTED)
connect(key);
else if (state == RECORDING)
login(key);
else if (state == CHANGE_PASSCODE)
change_passcode(key);
else if (state == CHANGE_GREETING)
change_greeting(key);
else if (state == MAILBOX_MENU)
mailbox_menu(key);
else if (state == MESSAGE_MENU)
message_menu(key);
}
void Connection::record(string voice)
{
if (state == RECORDING || state == CHANGE_GREETING)
current_recording += voice;
}
void Connection::hangup()
{
if (state == RECORDING)
current_mailbox->add_message(new Message(current_recording));
reset_connection();
}
void Connection::reset_connection()
{
current_recording = "";
accumulated_keys = "";
state = CONNECTED;
phone.speak(INITIAL_PROMPT);
}
void Connection::connect(string key)
{
if (key == "#")
{
current_mailbox = system.find_mailbox(accumulated_keys);
if (current_mailbox != NULL)
{
state = RECORDING;
phone.speak(current_mailbox->get_greeting());
}
else
phone.speak("Incorrect mailbox number. Try again!");
accumulated_keys = "";
}
else
accumulated_keys += key;
}
void Connection::login(string key)
{
if (key == "#")
{
if (current_mailbox->check_passcode(accumulated_keys))
{
state = MAILBOX_MENU;
phone.speak(MAILBOX_MENU_TEXT);
}
else
phone.speak("Incorrect passcode. Try again!");
accumulated_keys = "";
}
else
accumulated_keys += key;
}
void Connection::change_passcode(string key)
{
if (key == "#")
{
current_mailbox->set_passcode(accumulated_keys);
state = MAILBOX_MENU;
phone.speak(MAILBOX_MENU_TEXT);
accumulated_keys = "";
}
else
accumulated_keys += key;
}
void Connection::change_greeting(string key)
{
if (key == "#")
{
current_mailbox->set_greeting(current_recording);
current_recording = "";
state = MAILBOX_MENU;
phone.speak(MAILBOX_MENU_TEXT);
}
}
void Connection::mailbox_menu(string key)
{
if (key == "1")
{
state = MESSAGE_MENU;
phone.speak(MESSAGE_MENU_TEXT);
}
else if (key == "2")
{
state = CHANGE_PASSCODE;
phone.speak("Enter new passcode followed by the # key");
}
else if (key == "3")
{
state = CHANGE_GREETING;
phone.speak("Record your greeting, then press the # key");
}
}
void Connection::message_menu(string key)
{
if (key == "1")
{
string output = "";
Message* m = current_mailbox->get_current_message();
if (m == NULL) output += "No messages.\n";
else output += m->get_text() + "\n";
output += MESSAGE_MENU_TEXT;
phone.speak(output);
}
else if (key == "2")
{
current_mailbox->save_current_message();
phone.speak(MESSAGE_MENU_TEXT);
}
else if (key == "3")
{
current_mailbox->remove_current_message();
phone.speak(MESSAGE_MENU_TEXT);
}
else if (key == "4")
{
state = MAILBOX_MENU;
phone.speak(MAILBOX_MENU_TEXT);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -