change:标准化命令和添加命令说明。
This commit is contained in:
		
							parent
							
								
									eea5eee933
								
							
						
					
					
						commit
						f6e7596367
					
				@ -1,6 +1,6 @@
 | 
				
			|||||||
cmake_minimum_required(VERSION 3.16)
 | 
					cmake_minimum_required(VERSION 3.16)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
project(transm VERSION 1.4.0 LANGUAGES CXX)
 | 
					project(transm VERSION 1.4.1 LANGUAGES CXX)
 | 
				
			||||||
set(CMAKE_CXX_STANDARD 17)
 | 
					set(CMAKE_CXX_STANDARD 17)
 | 
				
			||||||
set(CMAKE_CXX_STANDARD_REQUIRED ON)
 | 
					set(CMAKE_CXX_STANDARD_REQUIRED ON)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -50,6 +50,78 @@ CClient::~CClient()
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void CClient::print_help(bool detail)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    TLOGI("version: {}", VERSION_NUM);
 | 
				
			||||||
 | 
					    TLOGI("opensource: {}", VERSION_URL);
 | 
				
			||||||
 | 
					    TLOGW("SupportCmd ==>");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (!detail) {
 | 
				
			||||||
 | 
					        TLOGI("Get|Who|Where|Ls|Sub|Fetch|Up|Down|UpTask|DownTask");
 | 
				
			||||||
 | 
					        TLOGI("You can use 'h' to show cmd's detail.");
 | 
				
			||||||
 | 
					        TLOGI("You can use 'end' or 'ctrl-c' to exit.");
 | 
				
			||||||
 | 
					        return;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    constexpr char* sp = "==================================================";
 | 
				
			||||||
 | 
					    TLOGI("{}", sp);
 | 
				
			||||||
 | 
					    TLOGW("#Get#");
 | 
				
			||||||
 | 
					    TLOGI("  des: Get all clients on server.");
 | 
				
			||||||
 | 
					    TLOGI("  cmd: Get get g G");
 | 
				
			||||||
 | 
					    TLOGI("  arg: NULL");
 | 
				
			||||||
 | 
					    TLOGI("{}", sp);
 | 
				
			||||||
 | 
					    TLOGW("#Who#");
 | 
				
			||||||
 | 
					    TLOGI("  des: Show current client's ID.");
 | 
				
			||||||
 | 
					    TLOGI("  cmd: Who who");
 | 
				
			||||||
 | 
					    TLOGI("  arg: NULL");
 | 
				
			||||||
 | 
					    TLOGI("{}", sp);
 | 
				
			||||||
 | 
					    TLOGW("#Where#");
 | 
				
			||||||
 | 
					    TLOGI("  des: Show current client's work dir.");
 | 
				
			||||||
 | 
					    TLOGI("  cmd: Where where wh");
 | 
				
			||||||
 | 
					    TLOGI("  arg: NULL");
 | 
				
			||||||
 | 
					    TLOGI("{}", sp);
 | 
				
			||||||
 | 
					    TLOGW("#Ls#");
 | 
				
			||||||
 | 
					    TLOGI("  des: List one client's all files and folders.");
 | 
				
			||||||
 | 
					    TLOGI("  cmd: Ls ls");
 | 
				
			||||||
 | 
					    TLOGI("  arg: @id @dir");
 | 
				
			||||||
 | 
					    TLOGI("{}", sp);
 | 
				
			||||||
 | 
					    TLOGW("#Sub#");
 | 
				
			||||||
 | 
					    TLOGI("  des: Submit local file's list on the server.");
 | 
				
			||||||
 | 
					    TLOGI("  cmd: Sub sub");
 | 
				
			||||||
 | 
					    TLOGI("  arg: @files(Separated by | if multi)");
 | 
				
			||||||
 | 
					    TLOGI("{}", sp);
 | 
				
			||||||
 | 
					    TLOGW("#Fetch#");
 | 
				
			||||||
 | 
					    TLOGI("  des: Fetch one client's submited files.");
 | 
				
			||||||
 | 
					    TLOGI("  cmd: Fetch fetch");
 | 
				
			||||||
 | 
					    TLOGI("  arg: @id @savedir");
 | 
				
			||||||
 | 
					    TLOGI("{}", sp);
 | 
				
			||||||
 | 
					    TLOGW("#Clear#");
 | 
				
			||||||
 | 
					    TLOGI("  des: clear submited list.");
 | 
				
			||||||
 | 
					    TLOGI("  cmd: Clear clear c C");
 | 
				
			||||||
 | 
					    TLOGI("  arg: NULL");
 | 
				
			||||||
 | 
					    TLOGI("{}", sp);
 | 
				
			||||||
 | 
					    TLOGW("#Up#");
 | 
				
			||||||
 | 
					    TLOGI("  des: Upload local files to one client directly.");
 | 
				
			||||||
 | 
					    TLOGI("  cmd: Up up");
 | 
				
			||||||
 | 
					    TLOGI("  arg: @id @files(Sep by | if multi) @savedir");
 | 
				
			||||||
 | 
					    TLOGI("{}", sp);
 | 
				
			||||||
 | 
					    TLOGW("#Down#");
 | 
				
			||||||
 | 
					    TLOGI("  des: Down one client's files directly.");
 | 
				
			||||||
 | 
					    TLOGI("  cmd: Down down");
 | 
				
			||||||
 | 
					    TLOGI("  arg: @id @files(Sep by | if multi) @savedir(opt)");
 | 
				
			||||||
 | 
					    TLOGI("{}", sp);
 | 
				
			||||||
 | 
					    TLOGW("#UpTask#");
 | 
				
			||||||
 | 
					    TLOGI("  des: Down one client's files directly.");
 | 
				
			||||||
 | 
					    TLOGI("  cmd: UpTask uptask ut");
 | 
				
			||||||
 | 
					    TLOGI("  arg: @id @taskfile(UTF-8)");
 | 
				
			||||||
 | 
					    TLOGI("{}", sp);
 | 
				
			||||||
 | 
					    TLOGW("#DownTask#");
 | 
				
			||||||
 | 
					    TLOGI("  des: Down one client's files directly.");
 | 
				
			||||||
 | 
					    TLOGI("  cmd: DownTask downtask dt");
 | 
				
			||||||
 | 
					    TLOGI("  arg: @id @taskfile(UTF-8)");
 | 
				
			||||||
 | 
					    TLOGI("{}", sp);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void CClient::run(const std::string& ip, const std::string& port, const std::string& config_dir)
 | 
					void CClient::run(const std::string& ip, const std::string& port, const std::string& config_dir)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    fs::path fp(config_dir);
 | 
					    fs::path fp(config_dir);
 | 
				
			||||||
@ -82,13 +154,9 @@ void CClient::run(const std::string& ip, const std::string& port, const std::str
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    get_id();
 | 
					    get_id();
 | 
				
			||||||
    if (ip == "127.0.0.1") {
 | 
					    if (ip == "127.0.0.1") {
 | 
				
			||||||
        get_task_list();
 | 
					        get_clients();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					    print_help(false);
 | 
				
			||||||
    TLOGI("version: {}", VERSION_NUM);
 | 
					 | 
				
			||||||
    TLOGI("opensource: {}", VERSION_URL);
 | 
					 | 
				
			||||||
    TLOGW("SupportCmd ==>");
 | 
					 | 
				
			||||||
    TLOGW("Get|Up|Down|Cancel|Update|Who|Where|Ls|Req");
 | 
					 | 
				
			||||||
    fc_append('|');
 | 
					    fc_append('|');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    while (1) {
 | 
					    while (1) {
 | 
				
			||||||
@ -104,6 +172,12 @@ void CClient::run(const std::string& ip, const std::string& port, const std::str
 | 
				
			|||||||
        fc_free(readline);
 | 
					        fc_free(readline);
 | 
				
			||||||
        std::cout << "" << std::endl;
 | 
					        std::cout << "" << std::endl;
 | 
				
			||||||
        cmd_input = ofen::COfStr::trim(cmd_input);
 | 
					        cmd_input = ofen::COfStr::trim(cmd_input);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (cmd_input == "help" || cmd_input == "h") {
 | 
				
			||||||
 | 
					            print_help(true);
 | 
				
			||||||
 | 
					            continue;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (cmd_input == "end" || cmd_input == "End") {
 | 
					        if (cmd_input == "end" || cmd_input == "End") {
 | 
				
			||||||
            th_run_ = false;
 | 
					            th_run_ = false;
 | 
				
			||||||
            std::this_thread::sleep_for(std::chrono::milliseconds(10));
 | 
					            std::this_thread::sleep_for(std::chrono::milliseconds(10));
 | 
				
			||||||
@ -119,11 +193,11 @@ void CClient::run(const std::string& ip, const std::string& port, const std::str
 | 
				
			|||||||
            continue;
 | 
					            continue;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        if (cmd_input == "Get" || cmd_input == "get" || cmd_input == "g" || cmd_input == "G") {
 | 
					        if (cmd_input == "Get" || cmd_input == "get" || cmd_input == "g" || cmd_input == "G") {
 | 
				
			||||||
            get_task_list();
 | 
					            get_clients();
 | 
				
			||||||
            continue;
 | 
					            continue;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        if (cmd_input == "Cancel" || cmd_input == "cancel" || cmd_input == "c" || cmd_input == "C") {
 | 
					        if (cmd_input == "Clear" || cmd_input == "clear" || cmd_input == "c" || cmd_input == "C") {
 | 
				
			||||||
            cancel_task();
 | 
					            cmd_clear_submited();
 | 
				
			||||||
            continue;
 | 
					            continue;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        auto vec = COfStr::split(cmd_input, " ");
 | 
					        auto vec = COfStr::split(cmd_input, " ");
 | 
				
			||||||
@ -135,28 +209,28 @@ void CClient::run(const std::string& ip, const std::string& port, const std::str
 | 
				
			|||||||
        std::string scmd = param.substr(0, param.find_first_of(" "));
 | 
					        std::string scmd = param.substr(0, param.find_first_of(" "));
 | 
				
			||||||
        param.erase(0, param.find_first_of(" ") + 1);
 | 
					        param.erase(0, param.find_first_of(" ") + 1);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (scmd == "Update" || scmd == "update") {
 | 
					        if (scmd == "UpTask" || scmd == "uptask" || scmd == "ut") {
 | 
				
			||||||
            request_update_list(param);
 | 
					            cmd_uptask(param);
 | 
				
			||||||
            continue;
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        if (scmd == "Send" || scmd == "send") {
 | 
					 | 
				
			||||||
            send_files(param);
 | 
					 | 
				
			||||||
            continue;
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        if (scmd == "Down" || scmd == "down") {
 | 
					 | 
				
			||||||
            down_task(param);
 | 
					 | 
				
			||||||
            continue;
 | 
					            continue;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        if (scmd == "Up" || scmd == "up") {
 | 
					        if (scmd == "Up" || scmd == "up") {
 | 
				
			||||||
            up_task(param);
 | 
					            cmd_upload_files(param);
 | 
				
			||||||
 | 
					            continue;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        if (scmd == "Fetch" || scmd == "fetch") {
 | 
				
			||||||
 | 
					            cmd_fetch_files(param);
 | 
				
			||||||
 | 
					            continue;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        if (scmd == "Sub" || scmd == "sub") {
 | 
				
			||||||
 | 
					            cmd_sub_list(param);
 | 
				
			||||||
            continue;
 | 
					            continue;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        if (scmd == "Ls" || scmd == "ls") {
 | 
					        if (scmd == "Ls" || scmd == "ls") {
 | 
				
			||||||
            require_dir_files(param);
 | 
					            cmd_ls(param);
 | 
				
			||||||
            continue;
 | 
					            continue;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        if (scmd == "Req" || scmd == "req") {
 | 
					        if (scmd == "Down" || scmd == "down") {
 | 
				
			||||||
            down_req_list(param);
 | 
					            cmd_down_list(param);
 | 
				
			||||||
            continue;
 | 
					            continue;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        TLOGE("No matched cmd, May be param size incorrect.");
 | 
					        TLOGE("No matched cmd, May be param size incorrect.");
 | 
				
			||||||
@ -166,14 +240,14 @@ void CClient::run(const std::string& ip, const std::string& port, const std::str
 | 
				
			|||||||
    TLOGI("{} exit.", __FUNCTION__);
 | 
					    TLOGI("{} exit.", __FUNCTION__);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bool CClient::get_task_list()
 | 
					bool CClient::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::down_task(const std::string& param)
 | 
					bool CClient::cmd_fetch_files(const std::string& param)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    if (downloading_) {
 | 
					    if (downloading_) {
 | 
				
			||||||
        TLOGW("Have Task Downloading, Please wait.....");
 | 
					        TLOGW("Have Task Downloading, Please wait.....");
 | 
				
			||||||
@ -218,7 +292,7 @@ bool CClient::down_task(const std::string& param)
 | 
				
			|||||||
    return true;
 | 
					    return true;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bool CClient::up_task(const std::string& param)
 | 
					bool CClient::cmd_sub_list(const std::string& param)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        std::lock_guard<std::mutex> lock(mutex_);
 | 
					        std::lock_guard<std::mutex> lock(mutex_);
 | 
				
			||||||
@ -270,7 +344,7 @@ bool CClient::up_task(const std::string& param)
 | 
				
			|||||||
    return send_frame(buf.get());
 | 
					    return send_frame(buf.get());
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bool CClient::cancel_task()
 | 
					bool CClient::cmd_clear_submited()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        std::lock_guard<std::mutex> lock(mutex_);
 | 
					        std::lock_guard<std::mutex> lock(mutex_);
 | 
				
			||||||
@ -286,7 +360,7 @@ bool CClient::cancel_task()
 | 
				
			|||||||
    return send_frame(buf.get());
 | 
					    return send_frame(buf.get());
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bool CClient::send_files(const std::string& param)
 | 
					bool CClient::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) {
 | 
				
			||||||
@ -470,7 +544,7 @@ void CClient::report_trans_ret(TransState state, const std::string& key)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    功能为,请求某个客户端,更新我所列出的文件,右侧是远端需要存储的目录(必须存在,不存在则不理会)
 | 
					    功能为,请求某个客户端,更新我所列出的文件,右侧是远端需要存储的目录(必须存在,不存在则不理会)
 | 
				
			||||||
*/
 | 
					*/
 | 
				
			||||||
bool CClient::request_update_list(const std::string& param)
 | 
					bool CClient::cmd_uptask(const std::string& param)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    auto tvec = COfStr::split(param, " ");
 | 
					    auto tvec = COfStr::split(param, " ");
 | 
				
			||||||
    if (tvec.size() < 2) {
 | 
					    if (tvec.size() < 2) {
 | 
				
			||||||
@ -665,7 +739,7 @@ bool CClient::get_dir_files(const std::string& dir, std::string& out, std::strin
 | 
				
			|||||||
    return true;
 | 
					    return true;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bool CClient::require_dir_files(const std::string& param)
 | 
					bool CClient::cmd_ls(const std::string& param)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    auto tvec = COfStr::split(param, " ");
 | 
					    auto tvec = COfStr::split(param, " ");
 | 
				
			||||||
    if (tvec.size() < 2) {
 | 
					    if (tvec.size() < 2) {
 | 
				
			||||||
@ -695,7 +769,7 @@ bool CClient::require_dir_files(const std::string& param)
 | 
				
			|||||||
    return true;
 | 
					    return true;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bool CClient::down_req_list(const std::string& param)
 | 
					bool CClient::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) {
 | 
				
			||||||
 | 
				
			|||||||
@ -48,19 +48,19 @@ 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);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
public:
 | 
					public:
 | 
				
			||||||
    bool get_task_list();
 | 
					    bool get_clients();
 | 
				
			||||||
    bool down_task(const std::string& param);
 | 
					    bool cmd_fetch_files(const std::string& param);
 | 
				
			||||||
    bool up_task(const std::string& param);
 | 
					    bool cmd_sub_list(const std::string& param);
 | 
				
			||||||
    bool cancel_task();
 | 
					    bool cmd_clear_submited();
 | 
				
			||||||
    bool send_files(const std::string& param);
 | 
					    bool cmd_upload_files(const std::string& param);
 | 
				
			||||||
    bool down_one_file(int remote_id, const std::string& file, const std::string& local_dir = "");
 | 
					    bool down_one_file(int remote_id, const std::string& file, const std::string& local_dir = "");
 | 
				
			||||||
    void report_trans_ret(TransState state, const std::string& key = "");
 | 
					    void report_trans_ret(TransState state, const std::string& key = "");
 | 
				
			||||||
    bool request_update_list(const std::string& param);
 | 
					    bool cmd_uptask(const std::string& param);
 | 
				
			||||||
    bool check_update_list(const std::string& content, std::map<std::string, std::string>& files);
 | 
					    bool check_update_list(const std::string& content, std::map<std::string, std::string>& files);
 | 
				
			||||||
    bool down_update_file(const std::map<std::string, std::string>& files);
 | 
					    bool down_update_file(const std::map<std::string, std::string>& files);
 | 
				
			||||||
    bool get_dir_files(const std::string& dir, std::string& out, std::string& error);
 | 
					    bool get_dir_files(const std::string& dir, std::string& out, std::string& error);
 | 
				
			||||||
    bool require_dir_files(const std::string& param);
 | 
					    bool cmd_ls(const std::string& param);
 | 
				
			||||||
    bool down_req_list(const std::string& param);
 | 
					    bool cmd_down_list(const std::string& param);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
private:
 | 
					private:
 | 
				
			||||||
    bool send_frame(CFrameBuffer* buf);
 | 
					    bool send_frame(CFrameBuffer* buf);
 | 
				
			||||||
@ -69,6 +69,7 @@ private:
 | 
				
			|||||||
    bool save_uuid();
 | 
					    bool save_uuid();
 | 
				
			||||||
    std::string read_uuid();
 | 
					    std::string read_uuid();
 | 
				
			||||||
    void get_id();
 | 
					    void get_id();
 | 
				
			||||||
 | 
					    void print_help(bool detail);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
private:
 | 
					private:
 | 
				
			||||||
    void handle_frame(CFrameBuffer* buf);
 | 
					    void handle_frame(CFrameBuffer* buf);
 | 
				
			||||||
 | 
				
			|||||||
@ -106,7 +106,7 @@ inline std::string now_str()
 | 
				
			|||||||
    auto milliseconds = std::chrono::duration_cast<std::chrono::milliseconds>(now.time_since_epoch()) % 1000;
 | 
					    auto milliseconds = std::chrono::duration_cast<std::chrono::milliseconds>(now.time_since_epoch()) % 1000;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    std::ostringstream timestamp;
 | 
					    std::ostringstream timestamp;
 | 
				
			||||||
    timestamp << std::put_time(std::localtime(&time_t_now), "[%Y-%m-%d %H:%M:%S") << "." << std::setfill('0')
 | 
					    timestamp << std::put_time(std::localtime(&time_t_now), "[%m-%d %H:%M:%S") << "." << std::setfill('0')
 | 
				
			||||||
              << std::setw(3) << milliseconds.count() << "] ";
 | 
					              << std::setw(3) << milliseconds.count() << "] ";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return timestamp.str();
 | 
					    return timestamp.str();
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user