upd:初步添加cmd测试用例架子。
This commit is contained in:
parent
2793dab420
commit
0ee24945bb
@ -15,13 +15,13 @@ namespace fs = boost::filesystem;
|
|||||||
namespace fs = std::filesystem;
|
namespace fs = std::filesystem;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
CClient::CClient() : msg_info_("")
|
TransmClient::TransmClient() : msg_info_("")
|
||||||
{
|
{
|
||||||
client_ = std::make_shared<CTcpClient>(io_context_);
|
client_ = std::make_shared<CTcpClient>(io_context_);
|
||||||
sleep_.set_timeout(5000);
|
sleep_.set_timeout(5000);
|
||||||
}
|
}
|
||||||
|
|
||||||
CClient::~CClient()
|
TransmClient::~TransmClient()
|
||||||
{
|
{
|
||||||
th_run_ = false;
|
th_run_ = false;
|
||||||
sleep_.contiune();
|
sleep_.contiune();
|
||||||
@ -50,7 +50,7 @@ CClient::~CClient()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void CClient::print_help(bool detail)
|
void TransmClient::print_help(bool detail)
|
||||||
{
|
{
|
||||||
TLOGI("version: {}", VERSION_NUM);
|
TLOGI("version: {}", VERSION_NUM);
|
||||||
TLOGI("opensource: {}", VERSION_URL);
|
TLOGI("opensource: {}", VERSION_URL);
|
||||||
@ -123,7 +123,7 @@ void CClient::print_help(bool detail)
|
|||||||
TLOGI("{}", sp);
|
TLOGI("{}", sp);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CClient::run(const std::string& ip, const std::string& port, const std::string& config_dir)
|
void TransmClient::run(const std::string& ip, const std::string& port, const std::string& config_dir)
|
||||||
{
|
{
|
||||||
fs::path fp(config_dir);
|
fs::path fp(config_dir);
|
||||||
config_path_ = fp.append("history.txt").string();
|
config_path_ = fp.append("history.txt").string();
|
||||||
@ -263,14 +263,14 @@ void CClient::run(const std::string& ip, const std::string& port, const std::str
|
|||||||
TLOGI("{} exit.", __FUNCTION__);
|
TLOGI("{} exit.", __FUNCTION__);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CClient::get_clients()
|
bool TransmClient::get_clients()
|
||||||
{
|
{
|
||||||
std::shared_ptr<CFrameBuffer> buf = std::make_shared<CFrameBuffer>();
|
std::shared_ptr<CFrameBuffer> buf = std::make_shared<CFrameBuffer>();
|
||||||
buf->type_ = TYPE_GET_LIST;
|
buf->type_ = TYPE_GET_LIST;
|
||||||
return send_frame(buf.get());
|
return send_frame(buf.get());
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CClient::cmd_fetch_files(const std::string& param)
|
bool TransmClient::cmd_fetch_files(const std::string& param)
|
||||||
{
|
{
|
||||||
if (downloading_) {
|
if (downloading_) {
|
||||||
TLOGW("Have Task Downloading, Please wait.....");
|
TLOGW("Have Task Downloading, Please wait.....");
|
||||||
@ -315,7 +315,7 @@ bool CClient::cmd_fetch_files(const std::string& param)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CClient::cmd_sub_list(const std::string& param)
|
bool TransmClient::cmd_sub_list(const std::string& param)
|
||||||
{
|
{
|
||||||
{
|
{
|
||||||
std::lock_guard<std::mutex> lock(mutex_);
|
std::lock_guard<std::mutex> lock(mutex_);
|
||||||
@ -367,7 +367,7 @@ bool CClient::cmd_sub_list(const std::string& param)
|
|||||||
return send_frame(buf.get());
|
return send_frame(buf.get());
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CClient::cmd_clear_submited()
|
bool TransmClient::cmd_clear_submited()
|
||||||
{
|
{
|
||||||
{
|
{
|
||||||
std::lock_guard<std::mutex> lock(mutex_);
|
std::lock_guard<std::mutex> lock(mutex_);
|
||||||
@ -383,7 +383,7 @@ bool CClient::cmd_clear_submited()
|
|||||||
return send_frame(buf.get());
|
return send_frame(buf.get());
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CClient::cmd_upload_files(const std::string& param)
|
bool TransmClient::cmd_upload_files(const std::string& param)
|
||||||
{
|
{
|
||||||
auto tvec = COfStr::split(param, " ");
|
auto tvec = COfStr::split(param, " ");
|
||||||
if (tvec.size() < 3) {
|
if (tvec.size() < 3) {
|
||||||
@ -456,7 +456,7 @@ bool CClient::cmd_upload_files(const std::string& param)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CClient::down_one_file(int remote_id, const std::string& file, const std::string& local_dir)
|
bool TransmClient::down_one_file(int remote_id, const std::string& file, const std::string& local_dir)
|
||||||
{
|
{
|
||||||
std::string ret_id{};
|
std::string ret_id{};
|
||||||
std::string ret_uuid{};
|
std::string ret_uuid{};
|
||||||
@ -541,7 +541,7 @@ bool CClient::down_one_file(int remote_id, const std::string& file, const std::s
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void CClient::report_trans_ret(TransState state, const std::string& key)
|
void TransmClient::report_trans_ret(TransState state, const std::string& key)
|
||||||
{
|
{
|
||||||
std::shared_ptr<TransInfomation> t = nullptr;
|
std::shared_ptr<TransInfomation> t = nullptr;
|
||||||
if (key.empty()) {
|
if (key.empty()) {
|
||||||
@ -574,7 +574,7 @@ void CClient::report_trans_ret(TransState state, const std::string& key)
|
|||||||
|
|
||||||
功能为,请求某个客户端,更新我所列出的文件,右侧是远端需要存储的目录(必须存在,不存在则不理会)
|
功能为,请求某个客户端,更新我所列出的文件,右侧是远端需要存储的目录(必须存在,不存在则不理会)
|
||||||
*/
|
*/
|
||||||
bool CClient::cmd_sub_task(const std::string& param, bool is_send)
|
bool TransmClient::cmd_sub_task(const std::string& param, bool is_send)
|
||||||
{
|
{
|
||||||
auto tvec = COfStr::split(param, " ");
|
auto tvec = COfStr::split(param, " ");
|
||||||
if (tvec.size() < 2) {
|
if (tvec.size() < 2) {
|
||||||
@ -686,7 +686,8 @@ bool CClient::cmd_sub_task(const std::string& param, bool is_send)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CClient::variable_and_parse_files(const std::string& content, std::map<std::string, std::string>& files)
|
bool TransmClient::variable_and_parse_files(const std::string& content,
|
||||||
|
std::map<std::string, std::string>& files)
|
||||||
{
|
{
|
||||||
auto vec = COfStr::split(content, "\n");
|
auto vec = COfStr::split(content, "\n");
|
||||||
bool valid = true;
|
bool valid = true;
|
||||||
@ -712,7 +713,7 @@ bool CClient::variable_and_parse_files(const std::string& content, std::map<std:
|
|||||||
return valid;
|
return valid;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CClient::down_update_file(const std::map<std::string, std::string>& files)
|
bool TransmClient::down_update_file(const std::map<std::string, std::string>& files)
|
||||||
{
|
{
|
||||||
std::shared_ptr<CFrameBuffer> buf = std::make_shared<CFrameBuffer>();
|
std::shared_ptr<CFrameBuffer> buf = std::make_shared<CFrameBuffer>();
|
||||||
buf->tid_ = list_server_id_;
|
buf->tid_ = list_server_id_;
|
||||||
@ -744,7 +745,7 @@ bool CClient::down_update_file(const std::map<std::string, std::string>& files)
|
|||||||
return suc;
|
return suc;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CClient::get_dir_files(const std::string& dir, std::string& out, std::string& error)
|
bool TransmClient::get_dir_files(const std::string& dir, std::string& out, std::string& error)
|
||||||
{
|
{
|
||||||
fs::path p(dir);
|
fs::path p(dir);
|
||||||
out.clear();
|
out.clear();
|
||||||
@ -764,7 +765,7 @@ bool CClient::get_dir_files(const std::string& dir, std::string& out, std::strin
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CClient::cmd_ls(const std::string& param)
|
bool TransmClient::cmd_ls(const std::string& param)
|
||||||
{
|
{
|
||||||
auto tvec = COfStr::split(param, " ");
|
auto tvec = COfStr::split(param, " ");
|
||||||
if (tvec.size() < 2) {
|
if (tvec.size() < 2) {
|
||||||
@ -794,7 +795,7 @@ bool CClient::cmd_ls(const std::string& param)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CClient::cmd_down_list(const std::string& param)
|
bool TransmClient::cmd_down_list(const std::string& param)
|
||||||
{
|
{
|
||||||
auto tvec = COfStr::split(param, " ");
|
auto tvec = COfStr::split(param, " ");
|
||||||
if (tvec.size() < 2) {
|
if (tvec.size() < 2) {
|
||||||
@ -830,7 +831,7 @@ bool CClient::cmd_down_list(const std::string& param)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CClient::send_frame(CFrameBuffer* buf)
|
bool TransmClient::send_frame(CFrameBuffer* buf)
|
||||||
{
|
{
|
||||||
char* out_buf{};
|
char* out_buf{};
|
||||||
int out_len{};
|
int out_len{};
|
||||||
@ -847,7 +848,7 @@ bool CClient::send_frame(CFrameBuffer* buf)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CClient::save_line_his(const std::string& input)
|
void TransmClient::save_line_his(const std::string& input)
|
||||||
{
|
{
|
||||||
if (input.empty()) {
|
if (input.empty()) {
|
||||||
return;
|
return;
|
||||||
@ -876,7 +877,7 @@ void CClient::save_line_his(const std::string& input)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<std::string> CClient::load_line_his()
|
std::vector<std::string> TransmClient::load_line_his()
|
||||||
{
|
{
|
||||||
std::vector<std::string> history;
|
std::vector<std::string> history;
|
||||||
if (!fs::exists(config_path_)) {
|
if (!fs::exists(config_path_)) {
|
||||||
@ -895,7 +896,7 @@ std::vector<std::string> CClient::load_line_his()
|
|||||||
return history;
|
return history;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string CClient::variable_and_reverse_files(const std::string& source)
|
std::string TransmClient::variable_and_reverse_files(const std::string& source)
|
||||||
{
|
{
|
||||||
auto vec = COfStr::split(source, "\n");
|
auto vec = COfStr::split(source, "\n");
|
||||||
std::string result;
|
std::string result;
|
||||||
@ -934,7 +935,7 @@ std::string CClient::variable_and_reverse_files(const std::string& source)
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CClient::save_uuid()
|
bool TransmClient::save_uuid()
|
||||||
{
|
{
|
||||||
fs::path uuid_path(uuid_path_);
|
fs::path uuid_path(uuid_path_);
|
||||||
if (fs::exists(uuid_path)) {
|
if (fs::exists(uuid_path)) {
|
||||||
@ -953,7 +954,7 @@ bool CClient::save_uuid()
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string CClient::read_uuid()
|
std::string TransmClient::read_uuid()
|
||||||
{
|
{
|
||||||
fs::path uuid_path(uuid_path_);
|
fs::path uuid_path(uuid_path_);
|
||||||
if (!fs::exists(uuid_path)) {
|
if (!fs::exists(uuid_path)) {
|
||||||
@ -970,7 +971,7 @@ std::string CClient::read_uuid()
|
|||||||
return uuid;
|
return uuid;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CClient::get_id()
|
void TransmClient::get_id()
|
||||||
{
|
{
|
||||||
auto* bf = new CFrameBuffer();
|
auto* bf = new CFrameBuffer();
|
||||||
bf->type_ = TYPE_GET_ID;
|
bf->type_ = TYPE_GET_ID;
|
||||||
@ -981,7 +982,7 @@ void CClient::get_id()
|
|||||||
delete bf;
|
delete bf;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CClient::handle_frame(CFrameBuffer* buf)
|
void TransmClient::handle_frame(CFrameBuffer* buf)
|
||||||
{
|
{
|
||||||
if (buf == nullptr) {
|
if (buf == nullptr) {
|
||||||
TLOGE("{} nullptr.", __FUNCTION__);
|
TLOGE("{} nullptr.", __FUNCTION__);
|
||||||
@ -1301,7 +1302,7 @@ void CClient::handle_frame(CFrameBuffer* buf)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void CClient::send_file_data_th(const char* keys)
|
void TransmClient::send_file_data_th(const char* keys)
|
||||||
{
|
{
|
||||||
std::string str_key(keys);
|
std::string str_key(keys);
|
||||||
std::shared_ptr<TransInfomation> t = nullptr;
|
std::shared_ptr<TransInfomation> t = nullptr;
|
||||||
@ -1387,7 +1388,7 @@ void CClient::send_file_data_th(const char* keys)
|
|||||||
TLOGD("Trans File {} To {} Done !!!, {}", t->cur_file_, str_key, send_size);
|
TLOGD("Trans File {} To {} Done !!!, {}", t->cur_file_, str_key, send_size);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CClient::hearts()
|
void TransmClient::hearts()
|
||||||
{
|
{
|
||||||
std::shared_ptr<CFrameBuffer> buf = std::make_shared<CFrameBuffer>();
|
std::shared_ptr<CFrameBuffer> buf = std::make_shared<CFrameBuffer>();
|
||||||
buf->type_ = TYPE_HEARTS;
|
buf->type_ = TYPE_HEARTS;
|
||||||
@ -1400,7 +1401,7 @@ void CClient::hearts()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void CClient::judget_down_active()
|
void TransmClient::judget_down_active()
|
||||||
{
|
{
|
||||||
std::shared_ptr<CFrameBuffer> buf = std::make_shared<CFrameBuffer>();
|
std::shared_ptr<CFrameBuffer> buf = std::make_shared<CFrameBuffer>();
|
||||||
buf->type_ = TYPE_JUDGE_ACTIVE;
|
buf->type_ = TYPE_JUDGE_ACTIVE;
|
||||||
@ -1416,8 +1417,8 @@ void CClient::judget_down_active()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string CClient::variable_handle(const std::string& task_list_path, const std::string& source,
|
std::string TransmClient::variable_handle(const std::string& task_list_path, const std::string& source,
|
||||||
bool is_local)
|
bool is_local)
|
||||||
{
|
{
|
||||||
std::string result(source);
|
std::string result(source);
|
||||||
// 支持的变量如下:
|
// 支持的变量如下:
|
||||||
@ -1437,7 +1438,7 @@ std::string CClient::variable_handle(const std::string& task_list_path, const st
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string CClient::handle_user_select(const std::unordered_map<int, std::string>& source, bool is_send)
|
std::string TransmClient::handle_user_select(const std::unordered_map<int, std::string>& source, bool is_send)
|
||||||
{
|
{
|
||||||
std::string handled_content{};
|
std::string handled_content{};
|
||||||
std::string input{};
|
std::string input{};
|
||||||
|
@ -38,11 +38,11 @@ struct TransInfomation {
|
|||||||
};
|
};
|
||||||
|
|
||||||
constexpr int down_check_wait = 100; // millsec
|
constexpr int down_check_wait = 100; // millsec
|
||||||
class CClient
|
class TransmClient
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
CClient();
|
TransmClient();
|
||||||
~CClient();
|
~TransmClient();
|
||||||
|
|
||||||
public:
|
public:
|
||||||
void run(const std::string& ip, const std::string& port, const std::string& config_dir);
|
void run(const std::string& ip, const std::string& port, const std::string& config_dir);
|
||||||
|
@ -10,13 +10,13 @@ namespace fs = boost::filesystem;
|
|||||||
namespace fs = std::filesystem;
|
namespace fs = std::filesystem;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
CServerConfig::CServerConfig()
|
ClientConfig::ClientConfig()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
CServerConfig::~CServerConfig() = default;
|
ClientConfig::~ClientConfig() = default;
|
||||||
|
|
||||||
bool CServerConfig::baseInit()
|
bool ClientConfig::baseInit()
|
||||||
{
|
{
|
||||||
fs::path tpath(COfPath::get_config_dir("transm", true));
|
fs::path tpath(COfPath::get_config_dir("transm", true));
|
||||||
config_dir_ = tpath.string();
|
config_dir_ = tpath.string();
|
||||||
@ -33,7 +33,7 @@ bool CServerConfig::baseInit()
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CServerConfig::read_ini(std::vector<TransmSet>& set)
|
bool ClientConfig::read_ini(std::vector<TransmSet>& set)
|
||||||
{
|
{
|
||||||
assert(init_ == true);
|
assert(init_ == true);
|
||||||
long groups = ini_handle_.GetLongValue("BASE", "GROUPS");
|
long groups = ini_handle_.GetLongValue("BASE", "GROUPS");
|
||||||
@ -59,7 +59,7 @@ bool CServerConfig::read_ini(std::vector<TransmSet>& set)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
long CServerConfig::have_ini(const std::vector<TransmSet>& set, const std::string& ip, long port)
|
long ClientConfig::have_ini(const std::vector<TransmSet>& set, const std::string& ip, long port)
|
||||||
{
|
{
|
||||||
long id = -1;
|
long id = -1;
|
||||||
for (const auto& item : set) {
|
for (const auto& item : set) {
|
||||||
@ -71,7 +71,7 @@ long CServerConfig::have_ini(const std::vector<TransmSet>& set, const std::strin
|
|||||||
return id;
|
return id;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CServerConfig::write_ini(const std::vector<TransmSet>& set)
|
bool ClientConfig::write_ini(const std::vector<TransmSet>& set)
|
||||||
{
|
{
|
||||||
assert(init_ == true);
|
assert(init_ == true);
|
||||||
for (size_t start = 0; start < set.size(); ++start) {
|
for (size_t start = 0; start < set.size(); ++start) {
|
||||||
@ -84,7 +84,7 @@ bool CServerConfig::write_ini(const std::vector<TransmSet>& set)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
long CServerConfig::append_ini(const std::string& ip, long port, const std::string& comment)
|
long ClientConfig::append_ini(const std::string& ip, long port, const std::string& comment)
|
||||||
{
|
{
|
||||||
assert(init_ == true);
|
assert(init_ == true);
|
||||||
long id = -1;
|
long id = -1;
|
||||||
@ -109,7 +109,7 @@ long CServerConfig::append_ini(const std::string& ip, long port, const std::stri
|
|||||||
return id;
|
return id;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CServerConfig::remove_ini(long num)
|
bool ClientConfig::remove_ini(long num)
|
||||||
{
|
{
|
||||||
assert(init_ == true);
|
assert(init_ == true);
|
||||||
std::vector<TransmSet> set;
|
std::vector<TransmSet> set;
|
||||||
@ -124,7 +124,7 @@ bool CServerConfig::remove_ini(long num)
|
|||||||
return write_ini(set);
|
return write_ini(set);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CServerConfig::get_ini(const std::vector<TransmSet>& set, long num, TransmSet& use)
|
bool ClientConfig::get_ini(const std::vector<TransmSet>& set, long num, TransmSet& use)
|
||||||
{
|
{
|
||||||
bool find = false;
|
bool find = false;
|
||||||
for (const auto& item : set) {
|
for (const auto& item : set) {
|
||||||
@ -137,12 +137,12 @@ bool CServerConfig::get_ini(const std::vector<TransmSet>& set, long num, TransmS
|
|||||||
return find;
|
return find;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string CServerConfig::get_config_dir() const
|
std::string ClientConfig::get_config_dir() const
|
||||||
{
|
{
|
||||||
return config_dir_;
|
return config_dir_;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CServerConfig::save_last_use(const std::string& ip, long port)
|
bool ClientConfig::save_last_use(const std::string& ip, long port)
|
||||||
{
|
{
|
||||||
assert(init_ == true);
|
assert(init_ == true);
|
||||||
ini_handle_.SetValue("Base", "LastUseIP", ip.c_str());
|
ini_handle_.SetValue("Base", "LastUseIP", ip.c_str());
|
||||||
@ -151,7 +151,7 @@ bool CServerConfig::save_last_use(const std::string& ip, long port)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CServerConfig::get_last_use(std::string& ip, long& port)
|
bool ClientConfig::get_last_use(std::string& ip, long& port)
|
||||||
{
|
{
|
||||||
assert(init_ == true);
|
assert(init_ == true);
|
||||||
if (!ini_handle_.KeyExists("Base", "LastUseIP") || !ini_handle_.KeyExists("Base", "LastUsePort")) {
|
if (!ini_handle_.KeyExists("Base", "LastUseIP") || !ini_handle_.KeyExists("Base", "LastUsePort")) {
|
||||||
@ -163,7 +163,7 @@ bool CServerConfig::get_last_use(std::string& ip, long& port)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CServerConfig::gen_default_ini(const std::string& path)
|
void ClientConfig::gen_default_ini(const std::string& path)
|
||||||
{
|
{
|
||||||
TLOGW("Gen Default Setting Ini in [{}].", path);
|
TLOGW("Gen Default Setting Ini in [{}].", path);
|
||||||
ini_handle_.LoadFile(path.c_str());
|
ini_handle_.LoadFile(path.c_str());
|
||||||
|
@ -25,11 +25,11 @@ struct CmdParam {
|
|||||||
bool null_use{false};
|
bool null_use{false};
|
||||||
};
|
};
|
||||||
|
|
||||||
class CServerConfig
|
class ClientConfig
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
CServerConfig();
|
ClientConfig();
|
||||||
~CServerConfig();
|
~ClientConfig();
|
||||||
|
|
||||||
public:
|
public:
|
||||||
bool baseInit();
|
bool baseInit();
|
||||||
|
@ -16,7 +16,7 @@
|
|||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
std::shared_ptr<CServerConfig> g_Config = nullptr;
|
std::shared_ptr<ClientConfig> g_Config = nullptr;
|
||||||
int parse_cmd(int argc, char** argv, CmdParam& param)
|
int parse_cmd(int argc, char** argv, CmdParam& param)
|
||||||
{
|
{
|
||||||
std::string intro(
|
std::string intro(
|
||||||
@ -169,7 +169,7 @@ int main(int argc, char* argv[])
|
|||||||
delete p;
|
delete p;
|
||||||
});
|
});
|
||||||
|
|
||||||
g_Config = std::make_shared<CServerConfig>();
|
g_Config = std::make_shared<ClientConfig>();
|
||||||
if (!g_Config->baseInit()) {
|
if (!g_Config->baseInit()) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
@ -234,7 +234,7 @@ int main(int argc, char* argv[])
|
|||||||
}
|
}
|
||||||
TLOGI("Build At {} {} under {} on {}", __DATE__, __TIME__, VERSION_GIT_COMMIT, VERSION_GIT_BRANCH);
|
TLOGI("Build At {} {} under {} on {}", __DATE__, __TIME__, VERSION_GIT_COMMIT, VERSION_GIT_BRANCH);
|
||||||
TLOGI("use ip => [{}], port => [{}]", ip, port);
|
TLOGI("use ip => [{}], port => [{}]", ip, port);
|
||||||
CClient client;
|
TransmClient client;
|
||||||
client.run(ip, std::to_string(port), g_Config->get_config_dir());
|
client.run(ip, std::to_string(port), g_Config->get_config_dir());
|
||||||
TLOGI("exit ==========");
|
TLOGI("exit ==========");
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -48,7 +48,7 @@ int main(int argc, char* argv[])
|
|||||||
TLOGI("Use Port:{}", port);
|
TLOGI("Use Port:{}", port);
|
||||||
}
|
}
|
||||||
asio::io_context io_context;
|
asio::io_context io_context;
|
||||||
CTcpServer server(io_context);
|
TransmServer server(io_context);
|
||||||
if (!server.start(port)) {
|
if (!server.start(port)) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
@ -7,13 +7,13 @@
|
|||||||
using namespace ofen;
|
using namespace ofen;
|
||||||
constexpr int check_idle_percycle = 1000 * 30; // 毫秒
|
constexpr int check_idle_percycle = 1000 * 30; // 毫秒
|
||||||
constexpr int remove_after_time = 60; // 秒
|
constexpr int remove_after_time = 60; // 秒
|
||||||
CTcpServer::CTcpServer(asio::io_context& io_context) : io_context_(io_context), acceptor_(io_context)
|
TransmServer::TransmServer(asio::io_context& io_context) : io_context_(io_context), acceptor_(io_context)
|
||||||
{
|
{
|
||||||
th_run_ = true;
|
th_run_ = true;
|
||||||
sleep_.set_timeout(check_idle_percycle);
|
sleep_.set_timeout(check_idle_percycle);
|
||||||
}
|
}
|
||||||
|
|
||||||
CTcpServer::~CTcpServer()
|
TransmServer::~TransmServer()
|
||||||
{
|
{
|
||||||
th_run_ = false;
|
th_run_ = false;
|
||||||
sleep_.contiune();
|
sleep_.contiune();
|
||||||
@ -22,7 +22,7 @@ CTcpServer::~CTcpServer()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CTcpServer::start(unsigned short port)
|
bool TransmServer::start(unsigned short port)
|
||||||
{
|
{
|
||||||
asio::ip::tcp::resolver resolver(io_context_);
|
asio::ip::tcp::resolver resolver(io_context_);
|
||||||
asio::ip::tcp::resolver::query query(asio::ip::host_name(), "");
|
asio::ip::tcp::resolver::query query(asio::ip::host_name(), "");
|
||||||
@ -63,7 +63,7 @@ bool CTcpServer::start(unsigned short port)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CTcpServer::stop()
|
void TransmServer::stop()
|
||||||
{
|
{
|
||||||
acceptor_.close();
|
acceptor_.close();
|
||||||
std::unique_lock<std::shared_mutex> lock(cli_mut_);
|
std::unique_lock<std::shared_mutex> lock(cli_mut_);
|
||||||
@ -75,7 +75,7 @@ void CTcpServer::stop()
|
|||||||
client_threads_.clear();
|
client_threads_.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
void CTcpServer::get_client_list(CMessageInfo& msg_info)
|
void TransmServer::get_client_list(CMessageInfo& msg_info)
|
||||||
{
|
{
|
||||||
struct TmpInfo {
|
struct TmpInfo {
|
||||||
std::string id;
|
std::string id;
|
||||||
@ -117,7 +117,7 @@ void CTcpServer::get_client_list(CMessageInfo& msg_info)
|
|||||||
msg_info.str = msg;
|
msg_info.str = msg;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CTcpServer::trans_data(CFrameBuffer* buf)
|
void TransmServer::trans_data(CFrameBuffer* buf)
|
||||||
{
|
{
|
||||||
std::shared_ptr<ClientCache> fcli = nullptr;
|
std::shared_ptr<ClientCache> fcli = nullptr;
|
||||||
std::shared_ptr<ClientCache> tcli = nullptr;
|
std::shared_ptr<ClientCache> tcli = nullptr;
|
||||||
@ -190,8 +190,8 @@ void CTcpServer::trans_data(CFrameBuffer* buf)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CTcpServer::check_double(CFrameBuffer* buf, std::shared_ptr<ClientCache>& fcli,
|
bool TransmServer::check_double(CFrameBuffer* buf, std::shared_ptr<ClientCache>& fcli,
|
||||||
std::shared_ptr<ClientCache>& tcli)
|
std::shared_ptr<ClientCache>& tcli)
|
||||||
{
|
{
|
||||||
std::shared_lock<std::shared_mutex> lock(cli_mut_);
|
std::shared_lock<std::shared_mutex> lock(cli_mut_);
|
||||||
if (client_map_.count(buf->fid_)) {
|
if (client_map_.count(buf->fid_)) {
|
||||||
@ -220,7 +220,7 @@ bool CTcpServer::check_double(CFrameBuffer* buf, std::shared_ptr<ClientCache>& f
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CTcpServer::accept_client()
|
void TransmServer::accept_client()
|
||||||
{
|
{
|
||||||
auto socket = std::make_shared<asio::ip::tcp::socket>(io_context_);
|
auto socket = std::make_shared<asio::ip::tcp::socket>(io_context_);
|
||||||
acceptor_.async_accept(*socket, [this, socket](const asio::error_code& error) {
|
acceptor_.async_accept(*socket, [this, socket](const asio::error_code& error) {
|
||||||
@ -248,15 +248,15 @@ void CTcpServer::accept_client()
|
|||||||
if (!can) {
|
if (!can) {
|
||||||
std::this_thread::sleep_for(std::chrono::minutes(1));
|
std::this_thread::sleep_for(std::chrono::minutes(1));
|
||||||
} else {
|
} else {
|
||||||
client_threads_[client_key] = std::thread(&CTcpServer::th_client, this, socket, client_key);
|
client_threads_[client_key] = std::thread(&TransmServer::th_client, this, socket, client_key);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
accept_client();
|
accept_client();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
void CTcpServer::th_client(const std::shared_ptr<asio::ip::tcp::socket>& socket,
|
void TransmServer::th_client(const std::shared_ptr<asio::ip::tcp::socket>& socket,
|
||||||
const std::string& client_key)
|
const std::string& client_key)
|
||||||
{
|
{
|
||||||
std::shared_ptr<int> deleter(new int(0), [&](int* p) {
|
std::shared_ptr<int> deleter(new int(0), [&](int* p) {
|
||||||
std::unique_lock<std::shared_mutex> lock(cli_mut_);
|
std::unique_lock<std::shared_mutex> lock(cli_mut_);
|
||||||
@ -330,7 +330,7 @@ void CTcpServer::th_client(const std::shared_ptr<asio::ip::tcp::socket>& socket,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CTcpServer::send_frame(const std::shared_ptr<asio::ip::tcp::socket>& socket, CFrameBuffer* buf)
|
bool TransmServer::send_frame(const std::shared_ptr<asio::ip::tcp::socket>& socket, CFrameBuffer* buf)
|
||||||
{
|
{
|
||||||
char* out_buf{};
|
char* out_buf{};
|
||||||
int out_len{};
|
int out_len{};
|
||||||
@ -358,7 +358,7 @@ bool CTcpServer::send_frame(const std::shared_ptr<asio::ip::tcp::socket>& socket
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CTcpServer::monitor_idle()
|
void TransmServer::monitor_idle()
|
||||||
{
|
{
|
||||||
while (th_run_) {
|
while (th_run_) {
|
||||||
sleep_.sleep();
|
sleep_.sleep();
|
||||||
|
@ -24,11 +24,11 @@ struct ClientCache {
|
|||||||
FrameType cur_type_{TYPE_DEFAULT};
|
FrameType cur_type_{TYPE_DEFAULT};
|
||||||
};
|
};
|
||||||
|
|
||||||
class CTcpServer
|
class TransmServer
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
CTcpServer(asio::io_context& io_context);
|
TransmServer(asio::io_context& io_context);
|
||||||
~CTcpServer();
|
~TransmServer();
|
||||||
|
|
||||||
public:
|
public:
|
||||||
bool start(unsigned short port);
|
bool start(unsigned short port);
|
||||||
|
@ -9,11 +9,29 @@ assistant.h
|
|||||||
assistant.cxx
|
assistant.cxx
|
||||||
)
|
)
|
||||||
|
|
||||||
|
set(TRANSM_TEST_SOURCES
|
||||||
|
../3rd/catch_amalgamated.cpp
|
||||||
|
../client/client.cpp
|
||||||
|
../client/client.h
|
||||||
|
../client/config.cpp
|
||||||
|
../client/config.h
|
||||||
|
../util/util.h
|
||||||
|
../server/server.cpp
|
||||||
|
../server/server.h
|
||||||
|
../net/net_base.h
|
||||||
|
assistant.h
|
||||||
|
assistant.cxx
|
||||||
|
)
|
||||||
|
|
||||||
add_executable(encry_correct_test EncryptCorrect.cxx ${TEST_SOURCES})
|
add_executable(encry_correct_test EncryptCorrect.cxx ${TEST_SOURCES})
|
||||||
add_executable(encry_speed_test EncryptSpeed.cxx ${TEST_SOURCES})
|
add_executable(encry_speed_test EncryptSpeed.cxx ${TEST_SOURCES})
|
||||||
target_link_libraries(encry_correct_test PRIVATE tinyaes trans_util)
|
target_link_libraries(encry_correct_test PRIVATE tinyaes trans_util)
|
||||||
target_link_libraries(encry_speed_test PRIVATE tinyaes trans_util)
|
target_link_libraries(encry_speed_test PRIVATE tinyaes trans_util)
|
||||||
|
|
||||||
|
add_executable(transm_cmd_test Cmd.cxx ${TRANSM_TEST_SOURCES})
|
||||||
|
target_link_libraries(transm_cmd_test PRIVATE trans_net trans_util)
|
||||||
|
|
||||||
enable_testing()
|
enable_testing()
|
||||||
add_test(NAME EncryCorrectTest COMMAND encry_correct_test)
|
add_test(NAME EncryCorrectTest COMMAND encry_correct_test)
|
||||||
add_test(NAME EncrySpeedTest COMMAND encry_speed_test -s)
|
add_test(NAME EncrySpeedTest COMMAND encry_speed_test -s)
|
||||||
|
add_test(NAME CmdTest COMMAND transm_cmd_test)
|
53
test/Cmd.cxx
Normal file
53
test/Cmd.cxx
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
#include <catch_amalgamated.hpp>
|
||||||
|
#include <cstdint>
|
||||||
|
|
||||||
|
#include "../client/client.h"
|
||||||
|
#include "../client/config.h"
|
||||||
|
#include "../server/server.h"
|
||||||
|
#include "assistant.h"
|
||||||
|
|
||||||
|
std::shared_ptr<TransmServer> server;
|
||||||
|
std::shared_ptr<TransmClient> clientA;
|
||||||
|
std::shared_ptr<TransmClient> clientB;
|
||||||
|
std::shared_ptr<ClientConfig> config;
|
||||||
|
|
||||||
|
asio::io_context server_context;
|
||||||
|
|
||||||
|
constexpr char* ip = "127.0.0.1";
|
||||||
|
constexpr unsigned short port = 9897;
|
||||||
|
bool server_suc = false;
|
||||||
|
|
||||||
|
void server_run()
|
||||||
|
{
|
||||||
|
server = std::make_shared<TransmServer>(server_context);
|
||||||
|
if (!server->start(port)) {
|
||||||
|
server_suc = false;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
server_suc = true;
|
||||||
|
server_context.run();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool main_test()
|
||||||
|
{
|
||||||
|
config = std::make_shared<ClientConfig>();
|
||||||
|
if (!config->baseInit()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::thread server_th(server_run);
|
||||||
|
if (value_wait(server_suc, true, std::equal_to<bool>(), 3000, 100) == false) {
|
||||||
|
server_th.join();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_CASE("transm cmd part", "[cmd]")
|
||||||
|
{
|
||||||
|
SECTION("correctness of cmd")
|
||||||
|
{
|
||||||
|
REQUIRE(main_test() == true);
|
||||||
|
}
|
||||||
|
}
|
@ -2,8 +2,8 @@
|
|||||||
#define ASSISTANT_H
|
#define ASSISTANT_H
|
||||||
|
|
||||||
#include <fstream>
|
#include <fstream>
|
||||||
#include <string>
|
|
||||||
#include <random>
|
#include <random>
|
||||||
|
#include <string>
|
||||||
|
|
||||||
#ifdef USE_BOOST
|
#ifdef USE_BOOST
|
||||||
#include <boost/filesystem.hpp>
|
#include <boost/filesystem.hpp>
|
||||||
@ -15,4 +15,42 @@ namespace fs = std::filesystem;
|
|||||||
|
|
||||||
bool random_file(const std::string& file, size_t size);
|
bool random_file(const std::string& file, size_t size);
|
||||||
|
|
||||||
#endif // ASSISTANT_H
|
/**
|
||||||
|
* @brief 等待变量的值达到预期值
|
||||||
|
*
|
||||||
|
* @tparam T 变量类型
|
||||||
|
* @tparam Compare 比较器类型
|
||||||
|
* @param value 变量的引用
|
||||||
|
* @param expected 预期值
|
||||||
|
* @param comparator 比较函数 (默认为 std::equal_to)
|
||||||
|
* @param timeout_ms 超时时间(毫秒),0表示无限等待
|
||||||
|
* @param interval_ms 检查间隔(毫秒)
|
||||||
|
* @return true 变量值符合预期
|
||||||
|
* @return false 超时或条件不满足
|
||||||
|
*/
|
||||||
|
template <typename T, typename Compare = std::equal_to<T>>
|
||||||
|
bool value_wait(const T& value, const T& expected, Compare comparator = Compare(),
|
||||||
|
unsigned long timeout_ms = 0, unsigned long interval_ms = 100)
|
||||||
|
{
|
||||||
|
auto start = std::chrono::steady_clock::now();
|
||||||
|
|
||||||
|
while (true) {
|
||||||
|
|
||||||
|
if (comparator(value, expected)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (timeout_ms > 0) {
|
||||||
|
auto elapsed = std::chrono::duration_cast<std::chrono::milliseconds>(
|
||||||
|
std::chrono::steady_clock::now() - start)
|
||||||
|
.count();
|
||||||
|
|
||||||
|
if (elapsed >= timeout_ms) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
std::this_thread::sleep_for(std::chrono::milliseconds(interval_ms));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif // ASSISTANT_H
|
Loading…
x
Reference in New Issue
Block a user