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