//------------------------------------------------------------------------------------- void TelnetHandler::resetStartPosition() { pEndPoint_->send(TELNET_CMD_MOVE_FOCUS_LEFT_MAX, strlen(TELNET_CMD_MOVE_FOCUS_LEFT_MAX)); std::string startstr = getInputStartString(); std::string backcmd = fmt::format("\33[{}C", startstr.size()); pEndPoint_->send(backcmd.c_str(), backcmd.size()); }
//------------------------------------------------------------------------------------- void TelnetHandler::sendNewLine() { std::string startstr = getInputStartString(); pEndPoint_->send(startstr.c_str(), startstr.size()); resetStartPosition(); currPos_ = 0; }
//------------------------------------------------------------------------------------- bool TelnetHandler::checkUDLR(const std::string &cmd) { if (cmd.find(TELNET_CMD_UP) != std::string::npos) // 上 { pEndPoint_->send(TELNET_CMD_MOVE_FOCUS_LEFT_MAX, strlen(TELNET_CMD_MOVE_FOCUS_LEFT_MAX)); sendDelChar(); std::string startstr = getInputStartString(); pEndPoint_->send(startstr.c_str(), startstr.size()); resetStartPosition(); if(!getingHistroyCmd_) { ++historyCommandIndex_; getingHistroyCmd_ = true; } std::string s = getHistoryCommand(false); pEndPoint_->send(s.c_str(), s.size()); command_ = s; currPos_ = s.size(); return true; } else if (cmd.find(TELNET_CMD_DOWN) != std::string::npos) // 下 { pEndPoint_->send(TELNET_CMD_MOVE_FOCUS_LEFT_MAX, strlen(TELNET_CMD_MOVE_FOCUS_LEFT_MAX)); sendDelChar(); std::string startstr = getInputStartString(); pEndPoint_->send(startstr.c_str(), startstr.size()); resetStartPosition(); if(!getingHistroyCmd_) { --historyCommandIndex_; getingHistroyCmd_ = true; } std::string s = getHistoryCommand(true); pEndPoint_->send(s.c_str(), s.size()); command_ = s; currPos_ = s.size(); return true; } else if (cmd.find(TELNET_CMD_RIGHT) != std::string::npos) // 右 { int cmdlen = strlen(TELNET_CMD_RIGHT); if(currPos_ < (int)command_.size()) { currPos_++; pEndPoint_->send(TELNET_CMD_RIGHT, cmdlen); } return true; } else if (cmd.find(TELNET_CMD_LEFT) != std::string::npos) // 左 { int cmdlen = strlen(TELNET_CMD_LEFT); if(currPos_ > 0) { currPos_--; pEndPoint_->send(TELNET_CMD_LEFT, cmdlen); } return true; } else if (cmd.find(TELNET_CMD_HOME) != std::string::npos) // 移动到行首 { if (currPos_ > 0) { std::string cmdstr = fmt::format("\033[{}D", currPos_); pEndPoint_->send(cmdstr.c_str(), cmdstr.length()); currPos_ = 0; } return true; } else if (cmd.find(TELNET_CMD_END) != std::string::npos) // 移动到行尾 { if (currPos_ != (int32)command_.length()) { std::string cmdstr = fmt::format("\033[{}C", command_.length() - currPos_); pEndPoint_->send(cmdstr.c_str(), cmdstr.length()); currPos_ = command_.length(); } return true; } return false; }
//------------------------------------------------------------------------------------- bool TelnetHandler::checkUDLR() { if(command_.find(TELNET_CMD_UP) != std::string::npos) // 上 { pEndPoint_->send(TELNET_CMD_MOVE_FOCUS_LEFT_MAX, strlen(TELNET_CMD_MOVE_FOCUS_LEFT_MAX)); sendDelChar(); std::string startstr = getInputStartString(); pEndPoint_->send(startstr.c_str(), startstr.size()); resetStartPosition(); if(!getingHistroyCmd_) { ++historyCommandIndex_; getingHistroyCmd_ = true; } std::string s = getHistoryCommand(false); pEndPoint_->send(s.c_str(), s.size()); command_ = s; buffer_.clear(); currPos_ = s.size(); return true; } else if(command_.find(TELNET_CMD_DOWN) != std::string::npos) // 下 { pEndPoint_->send(TELNET_CMD_MOVE_FOCUS_LEFT_MAX, strlen(TELNET_CMD_MOVE_FOCUS_LEFT_MAX)); sendDelChar(); std::string startstr = getInputStartString(); pEndPoint_->send(startstr.c_str(), startstr.size()); resetStartPosition(); if(!getingHistroyCmd_) { --historyCommandIndex_; getingHistroyCmd_ = true; } std::string s = getHistoryCommand(true); pEndPoint_->send(s.c_str(), s.size()); command_ = s; buffer_.clear(); currPos_ = s.size(); return true; } else if(command_.find(TELNET_CMD_RIGHT) != std::string::npos) // 右 { int cmdlen = strlen(TELNET_CMD_RIGHT); currPos_-= cmdlen; command_.erase(command_.find(TELNET_CMD_RIGHT), cmdlen); if(currPos_ < (int)command_.size()) { currPos_++; pEndPoint_->send(TELNET_CMD_RIGHT, cmdlen); } return true; } else if(command_.find(TELNET_CMD_LEFT) != std::string::npos) // 左 { int cmdlen = strlen(TELNET_CMD_LEFT); currPos_-= (int)(cmdlen + 1); if(currPos_ < 0) { currPos_ = 0; } else { pEndPoint_->send(TELNET_CMD_LEFT, cmdlen); } command_.erase(command_.find(TELNET_CMD_LEFT), cmdlen); return true; } return false; }