diff --git a/client/config.h b/client/config.h index 36a486c..c699fd7 100644 --- a/client/config.h +++ b/client/config.h @@ -16,6 +16,7 @@ struct TransmSet { struct CmdParam { std::string removeValue; std::string appendValue; + std::string connectValue; bool showValue{false}; long use_config{-1}; bool parsed{false}; diff --git a/client/main.cpp b/client/main.cpp index 90fb73e..9c90fa8 100644 --- a/client/main.cpp +++ b/client/main.cpp @@ -30,6 +30,7 @@ int parse_cmd(int argc, char** argv, CmdParam& param) app.add_flag("-d, --direct", param.direct_use, "添加服务器时直接使用此服务器。"); app.add_flag("-l, --last", param.last_use, "直接使用之前最后一次使用的服务器。"); app.add_flag("-n, --null", param.null_use, "先运行在选择服务器。"); + app.add_option("-c, --connect", param.connectValue, "直连服务器((地址格式:127.0.0.1:9898)。"); if (argc == 1) { std::cout << app.help() << std::endl; @@ -179,42 +180,58 @@ int main(int argc, char* argv[]) if (!param.parsed) { return 0; } - if (!exec_cmd(param, run)) { - TLOGW("exec_cmd failed!"); - return -1; - } - if (!run && !param.direct_use && !param.last_use && !param.null_use) { - return 0; - } std::string ip; long port{}; - std::vector<TransmSet> sets; - if (!g_Config->read_ini(sets)) { + if (!param.connectValue.empty()) { + std::regex pattern(R"((\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}):(\d+))"); + std::smatch matches; + + if (std::regex_match(param.connectValue, matches, pattern) && matches.size() == 3) { + ip = matches[1].str(); + port = std::stol(matches[2].str()); + run = true; + } else { + TLOGE("Invalid connect value [{}]", param.connectValue); + return -1; + } + } else if (!exec_cmd(param, run)) { + TLOGW("exec_cmd failed!"); return -1; } - if (param.null_use) { - if (!select_server(sets, ip, port)) { + if (!run && !param.direct_use && !param.last_use && !param.null_use) { + return 0; + } + + if (ip.empty()) { + std::vector<TransmSet> sets; + if (!g_Config->read_ini(sets)) { return -1; } - } else { - if (param.last_use) { - if (!g_Config->get_last_use(ip, port)) { + + if (param.null_use) { + if (!select_server(sets, ip, port)) { return -1; } } else { - TransmSet use; - if (!g_Config->get_ini(sets, param.use_config, use)) { - TLOGW("Not found config by num:[{}]", param.use_config); - return -1; + if (param.last_use) { + if (!g_Config->get_last_use(ip, port)) { + return -1; + } + } else { + TransmSet use; + if (!g_Config->get_ini(sets, param.use_config, use)) { + TLOGW("Not found config by num:[{}]", param.use_config); + return -1; + } + ip = use.ip; + port = use.port; } - ip = use.ip; - port = use.port; } + g_Config->save_last_use(ip, port); } - g_Config->save_last_use(ip, port); TLOGI("Build At {} {} under {} on {}", __DATE__, __TIME__, VERSION_GIT_COMMIT, VERSION_GIT_BRANCH); TLOGI("use ip => [{}], port => [{}]", ip, port); CClient client;