#include "ConsoleSession.h" #include "Log.h" namespace core { ConsoleSession::ConsoleSession(EPoll &ePoll, Service &service) : TerminalSession(ePoll, service) {} ConsoleSession::~ConsoleSession() {} void ConsoleSession::output(std::stringstream &out) { // socket->output(out); } void ConsoleSession::protocol(std::string data = "") { switch (status) { case WELCOME: setBackColor(BG_BLACK); clear(); setCursorLocation(1, 1); setBackColor(BG_BLUE); clearEOL(); out << "ConsoleSession"; setCursorLocation(2, 1); setBackColor(BG_BLACK); status = LOGIN; protocol(); break; case LOGIN: setCursorLocation(3, 3); out << "Enter User Profile: "; send(); status = WAIT_USER_PROFILE; break; case WAIT_USER_PROFILE: status = PASSWORD; protocol(); break; case PASSWORD: setCursorLocation(4, 7); out << "Enter Password: "; send(); status = WAIT_PASSWORD; break; case WAIT_PASSWORD: setBackColor(BG_BLACK); clear(); setCursorLocation(1, 1); setBackColor(BG_BLUE); clearEOL(); out << "ConsoleSession"; setCursorLocation(2, 1); setBackColor(BG_BLACK); scrollArea(2, 16); status = PROMPT; protocol(); break; case PROMPT: Log(LOG_DEBUG_1) << "Lines is " << getLines() << "."; setCursorLocation(17, 1); clearEOL(); out << ("--> "); send(); status = INPUT; break; case INPUT: command = std::string(data); command.erase(command.find_last_not_of("\r\n\t") + 1); status = PROCESS; protocol(); break; case PROCESS: doCommand(command); status = (command == "exit")? DONE: PROMPT; protocol(); break; case DONE: out << "Done." << std::endl; break; default: out << "Unrecognized status code: ERROR."; break; } } void ConsoleSession::writeLog(std::string data) { saveCursor(); setCursorLocation(16, 1); out << data; restoreCursor(); send(); } void ConsoleSession::doCommand(std::string request) { saveCursor(); setCursorLocation(16, 1); out << "--> " << request << std::endl; service.commands.processRequest(request, this, out); restoreCursor(); send(); } }