108 lines
2.6 KiB
C++
108 lines
2.6 KiB
C++
#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(std::string 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();
|
|
break;
|
|
|
|
case LOGIN:
|
|
setCursorLocation(3, 3);
|
|
out << "Enter User Profile: ";
|
|
status = WAIT_USER_PROFILE;
|
|
break;
|
|
|
|
case WAIT_USER_PROFILE:
|
|
status = PASSWORD;
|
|
protocol();
|
|
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();
|
|
break;
|
|
|
|
case PROMPT:
|
|
setCursorLocation(17, 1);
|
|
clearEOL();
|
|
out << ("--> ");
|
|
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);
|
|
restoreCursor();
|
|
send();
|
|
}
|
|
|
|
void ConsoleSession::doCommand(std::string request) {
|
|
saveCursor();
|
|
setCursorLocation(16, 1);
|
|
out << "--> " << request << std::endl;
|
|
server.commands.processRequest(request, this, out);
|
|
restoreCursor();
|
|
send();
|
|
}
|
|
|
|
}
|