fix:修正mingw编译异常,优化客户端命令行解析部分
This commit is contained in:
		
							parent
							
								
									cc9aadd68a
								
							
						
					
					
						commit
						e897fe08bb
					
				
							
								
								
									
										5
									
								
								.vscode/settings.json
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										5
									
								
								.vscode/settings.json
									
									
									
									
										vendored
									
									
								
							@ -20,7 +20,7 @@
 | 
				
			|||||||
        ],
 | 
					        ],
 | 
				
			||||||
        "visualizerFile": "${workspaceRoot}/.vscode/qt5.natvis",
 | 
					        "visualizerFile": "${workspaceRoot}/.vscode/qt5.natvis",
 | 
				
			||||||
        "args": [
 | 
					        "args": [
 | 
				
			||||||
            "-a", "106.14.150.219:9898"
 | 
					            "-h"
 | 
				
			||||||
        ]
 | 
					        ]
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "cmake.environment": {
 | 
					    "cmake.environment": {
 | 
				
			||||||
@ -141,6 +141,7 @@
 | 
				
			|||||||
        "expected": "cpp",
 | 
					        "expected": "cpp",
 | 
				
			||||||
        "numbers": "cpp",
 | 
					        "numbers": "cpp",
 | 
				
			||||||
        "semaphore": "cpp",
 | 
					        "semaphore": "cpp",
 | 
				
			||||||
        "span": "cpp"
 | 
					        "span": "cpp",
 | 
				
			||||||
 | 
					        "text_encoding": "cpp"
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@ -12,6 +12,7 @@ if (CMAKE_CXX_COMPILER_ID MATCHES "GNU" AND CMAKE_SYSTEM_NAME MATCHES "Windows")
 | 
				
			|||||||
    MESSAGE(STATUS "Add MinGW Param.")
 | 
					    MESSAGE(STATUS "Add MinGW Param.")
 | 
				
			||||||
    add_compile_options(-finput-charset=utf-8)
 | 
					    add_compile_options(-finput-charset=utf-8)
 | 
				
			||||||
    add_compile_options(-fexec-charset=gbk)
 | 
					    add_compile_options(-fexec-charset=gbk)
 | 
				
			||||||
 | 
					    add_compile_options(-Wa,-mbig-obj)
 | 
				
			||||||
endif()
 | 
					endif()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
set(CMAKE_DEBUG_POSTFIX "d")
 | 
					set(CMAKE_DEBUG_POSTFIX "d")
 | 
				
			||||||
 | 
				
			|||||||
@ -88,6 +88,7 @@ class CFileOpr
 | 
				
			|||||||
public:
 | 
					public:
 | 
				
			||||||
    CFileOpr();
 | 
					    CFileOpr();
 | 
				
			||||||
    ~CFileOpr();
 | 
					    ~CFileOpr();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
public:
 | 
					public:
 | 
				
			||||||
    static std::vector<std::string> get_file_list(const std::string& input);
 | 
					    static std::vector<std::string> get_file_list(const std::string& input);
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
@ -17,6 +17,7 @@ struct CmdParam {
 | 
				
			|||||||
    std::string appendValue;
 | 
					    std::string appendValue;
 | 
				
			||||||
    bool showValue{false};
 | 
					    bool showValue{false};
 | 
				
			||||||
    long use_config{-1};
 | 
					    long use_config{-1};
 | 
				
			||||||
 | 
					    bool parsed{false};
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class CServerConfig
 | 
					class CServerConfig
 | 
				
			||||||
 | 
				
			|||||||
@ -8,7 +8,7 @@
 | 
				
			|||||||
std::shared_ptr<spdlog::logger> g_Logger = nullptr;
 | 
					std::shared_ptr<spdlog::logger> g_Logger = nullptr;
 | 
				
			||||||
std::shared_ptr<CServerConfig> g_Config = nullptr;
 | 
					std::shared_ptr<CServerConfig> g_Config = nullptr;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bool parse_cmd(int argc, char** argv, CmdParam& param)
 | 
					int parse_cmd(int argc, char** argv, CmdParam& param)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    std::string intro("transmc cmd introduce.");
 | 
					    std::string intro("transmc cmd introduce.");
 | 
				
			||||||
    CLI::App app(intro);
 | 
					    CLI::App app(intro);
 | 
				
			||||||
@ -17,14 +17,20 @@ bool parse_cmd(int argc, char** argv, CmdParam& param)
 | 
				
			|||||||
    app.add_option("-a, --append", param.appendValue, "添加服务器地址组(地址格式:127.0.0.1:9898)");
 | 
					    app.add_option("-a, --append", param.appendValue, "添加服务器地址组(地址格式:127.0.0.1:9898)");
 | 
				
			||||||
    app.add_flag("-s, --show", param.showValue, "查看服务器地址组");
 | 
					    app.add_flag("-s, --show", param.showValue, "查看服务器地址组");
 | 
				
			||||||
    app.add_option("-r, --remove", param.removeValue, "移除服务器地址组(值为使用--show中显示的序号)");
 | 
					    app.add_option("-r, --remove", param.removeValue, "移除服务器地址组(值为使用--show中显示的序号)");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (argc == 1) {
 | 
				
			||||||
 | 
					        std::cout << app.help() << std::endl;
 | 
				
			||||||
 | 
					        return 0;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    // 这里的 CLI11_PARSE 在程序没有输入或者仅输入--help(-h)时,会直接返回,后面代码都不会执行。
 | 
				
			||||||
 | 
					    // 当有自定义的参数被输入时,后面代码会执行。
 | 
				
			||||||
    try {
 | 
					    try {
 | 
				
			||||||
        CLI11_PARSE(app, argc, argv);
 | 
					        CLI11_PARSE(app, argc, argv);
 | 
				
			||||||
        return true;
 | 
					 | 
				
			||||||
    } catch (const CLI::ParseError& e) {
 | 
					    } catch (const CLI::ParseError& e) {
 | 
				
			||||||
        std::cerr << "Error parsing command line: " << e.what() << std::endl;
 | 
					        return app.exit(e);
 | 
				
			||||||
        return false;
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    return false;
 | 
					    param.parsed = true;
 | 
				
			||||||
 | 
					    return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bool exec_cmd(const CmdParam& param, bool& run)
 | 
					bool exec_cmd(const CmdParam& param, bool& run)
 | 
				
			||||||
@ -49,7 +55,6 @@ bool exec_cmd(const CmdParam& param, bool& run)
 | 
				
			|||||||
        g_Logger->error("append and remove can't simultaneous operate!");
 | 
					        g_Logger->error("append and remove can't simultaneous operate!");
 | 
				
			||||||
        return false;
 | 
					        return false;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    // 如果是移除
 | 
					 | 
				
			||||||
    if (!param.appendValue.empty()) {
 | 
					    if (!param.appendValue.empty()) {
 | 
				
			||||||
        std::regex rg(R"(([^:]+):(\d+))");
 | 
					        std::regex rg(R"(([^:]+):(\d+))");
 | 
				
			||||||
        std::smatch match;
 | 
					        std::smatch match;
 | 
				
			||||||
@ -68,10 +73,10 @@ bool exec_cmd(const CmdParam& param, bool& run)
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
    if (!param.removeValue.empty()) {
 | 
					    if (!param.removeValue.empty()) {
 | 
				
			||||||
        if (!g_Config->remove_ini(std::stol(param.removeValue))) {
 | 
					        if (!g_Config->remove_ini(std::stol(param.removeValue))) {
 | 
				
			||||||
            g_Logger->error("remove {} failed, please check!", param.removeValue);
 | 
					            g_Logger->error("remove config num=[{}] failed, please check!", param.removeValue);
 | 
				
			||||||
            return false;
 | 
					            return false;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        g_Logger->info("remove {} success!", param.removeValue);
 | 
					        g_Logger->info("remove config num=[{}] success!", param.removeValue);
 | 
				
			||||||
        return true;
 | 
					        return true;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    g_Logger->error("not matched!", param.removeValue);
 | 
					    g_Logger->error("not matched!", param.removeValue);
 | 
				
			||||||
@ -89,36 +94,29 @@ int main(int argc, char* argv[])
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    bool run = false;
 | 
					    bool run = false;
 | 
				
			||||||
    CmdParam param;
 | 
					    CmdParam param;
 | 
				
			||||||
    if (!parse_cmd(argc, argv, param)) {
 | 
					    parse_cmd(argc, argv, param);
 | 
				
			||||||
        g_Logger->error("parse cmd failed!");
 | 
					    if (!param.parsed) {
 | 
				
			||||||
        return -1;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    if (param.appendValue.empty() && param.removeValue.empty() && param.showValue == false &&
 | 
					 | 
				
			||||||
        param.use_config == -1) {
 | 
					 | 
				
			||||||
        g_Logger->warn("Use --help To Get How To Use.");
 | 
					 | 
				
			||||||
        return 0;
 | 
					        return 0;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					 | 
				
			||||||
    if (!exec_cmd(param, run)) {
 | 
					    if (!exec_cmd(param, run)) {
 | 
				
			||||||
        g_Logger->error("exec_cmd failed!");
 | 
					        g_Logger->error("exec_cmd failed!");
 | 
				
			||||||
        return -1;
 | 
					        return -1;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					 | 
				
			||||||
    if (!run) {
 | 
					    if (!run) {
 | 
				
			||||||
        return 0;
 | 
					        return 0;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    g_Logger->info("Configure At {} under {} on {}", VERSION_BUILD_DATE, VERSION_GIT_HASH,
 | 
					 | 
				
			||||||
                   VERSION_GIT_BRANCH);
 | 
					 | 
				
			||||||
    std::vector<TransmSet> set;
 | 
					    std::vector<TransmSet> set;
 | 
				
			||||||
    if (!g_Config->read_ini(set)) {
 | 
					    if (!g_Config->read_ini(set)) {
 | 
				
			||||||
        return -1;
 | 
					        return -1;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    TransmSet use;
 | 
					    TransmSet use;
 | 
				
			||||||
    if (!g_Config->get_ini(set, param.use_config, use)) {
 | 
					    if (!g_Config->get_ini(set, param.use_config, use)) {
 | 
				
			||||||
 | 
					        g_Logger->error("Not found config by num:[{}]", param.use_config);
 | 
				
			||||||
        return -1;
 | 
					        return -1;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					    g_Logger->info("Configure At {} under {} on {}", VERSION_BUILD_DATE, VERSION_GIT_HASH,
 | 
				
			||||||
 | 
					                   VERSION_GIT_BRANCH);
 | 
				
			||||||
    g_Logger->info("use ip:[{}], port:[{}]", use.ip, use.port);
 | 
					    g_Logger->info("use ip:[{}], port:[{}]", use.ip, use.port);
 | 
				
			||||||
    CClient client(g_Logger);
 | 
					    CClient client(g_Logger);
 | 
				
			||||||
    client.run(use.ip, std::to_string(use.port));
 | 
					    client.run(use.ip, std::to_string(use.port));
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user