fix:修正mingw编译异常,优化客户端命令行解析部分

This commit is contained in:
taynpg 2025-01-06 18:59:11 +08:00
parent cc9aadd68a
commit e897fe08bb
5 changed files with 24 additions and 22 deletions

View File

@ -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"
} }
} }

View File

@ -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")

View File

@ -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);
}; };

View File

@ -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

View File

@ -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));