#include "ConsoleSession.h" #include "Log.h" namespace core { ConsoleSession::ConsoleSession(EPoll &ePoll, TCPServer &server) : TerminalSession(ePoll, server) { coreutils::Log(coreutils::LOG_DEBUG_2) << "Constructing ConsoleSession..."; } ConsoleSession::~ConsoleSession() {} void ConsoleSession::protocol(coreutils::ZString data) { coreutils::Log(coreutils::LOG_DEBUG_1) << "ConsoleSession protocol " << status; 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((char*)""); break; case LOGIN: setCursorLocation(3, 3); out << "Enter User Profile: "; status = WAIT_USER_PROFILE; break; case WAIT_USER_PROFILE: status = PASSWORD; protocol((char*)""); break; case PASSWORD: setCursorLocation(4, 7); out << "Enter Password: "; 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((char*)""); break; case PROMPT: setCursorLocation(17, 1); clearEOL(); out << ("--> "); status = INPUT; break; case INPUT: command = data; status = PROCESS; protocol((char*)""); break; case PROCESS: doCommand(command); status = command.equals((char *)"exit") ? DONE: PROMPT; protocol((char*)""); 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); restoreCursor(); } void ConsoleSession::doCommand(coreutils::ZString request) { saveCursor(); setCursorLocation(16, 1); out << "--> " << request << std::endl; server.commands.processRequest(request, *this); restoreCursor(); } }