缩减代码

This commit is contained in:
2026-08-09 22:00:30 +08:00
parent 11e7affc75
commit 256c41fa9c
28 changed files with 157 additions and 1024 deletions
-163
View File
@@ -1,7 +1,6 @@
#include "Global.h"
#include <drogon/HttpAppFramework.h>
#include <filesystem>
#include <fstream>
#include <sstream>
#include <string>
#include <string_view>
@@ -65,8 +64,6 @@ Global::Global() {
serial::serial_logger = new BaseLogger("@/logs/serial", MB * size_MB, piece_num);
SSR::mode_s_logger = new BaseLogger("@/logs/mode_s", MB * size_MB * 10, piece_num);
dsp_logger = new BaseLogger("@/logs/dsp", MB * size_MB, piece_num);
// libais::libais_logger = new BaseLogger("@/logs/libais", MB * size_MB,
// piece_num);
server_logger = new BaseLogger("@/logs/server", MB * size_MB, piece_num);
asio_socket::socket_logger->set_redirect([](const BaseLogger::Log_Info& log_info) {
auto msg = "[" + std::string("func") + "~" + log_info.func_pattern + "] " + log_info.log_type.to_string() +
@@ -124,144 +121,12 @@ Global::Global() {
auto str = toJson().to_json_string();
server_logger->debug("启动", {}, str);
SSR::mode_s_logger->debug("启动", {}, str);
// libais::libais_logger->debug("启动", {}, str);
std::cout << str << std::endl;
// libais::log = normal_log;
// libais::log = ais_log;
// mode_s_log_info = mode_s_log;
init_web_server();
}
Global::~Global() {
std::cout << "Global::~Global()" << std::endl;
}
void replace(std::string& originalStr, std::string_view findStr, std::string_view replaceStr) {
size_t pos = originalStr.find(findStr);
while (pos != std::string::npos) {
originalStr.replace(pos, findStr.length(), replaceStr);
pos = originalStr.find(findStr, pos + replaceStr.length());
}
}
std::string oneLine(std::string_view str) {
auto ret = std::string(str);
replace(ret, "\n", "[n]");
return ret;
}
bool isHexadecimal(std::string_view str) {
return std::all_of(str.begin(), str.end(), [](unsigned char c) {
return std::isdigit(c) || (c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F');
});
}
void handle_buffer_muti_start(std::string& buffer, std::string_view data, const std::set<std::string>& prefix_list,
const std::function<void(std::string&)>& callback) {
if (!data.empty()) {
buffer += data;
// std::cout << "[data]:" + data + "\n";
// std::cout << "[buffer]:" + buffer + "\n";
while (!buffer.empty() && buffer.back() == '\n') {
buffer.pop_back();
}
while (true) {
std::string c;
size_t pos = 0, n = buffer.size();
for (; pos < n; pos++) {
bool find = false;
for (std::string_view prefix : prefix_list) {
if (pos + prefix.size() <= n) {
if (buffer.substr(pos, prefix.size()) == prefix) {
c = prefix;
find = true;
break;
}
}
}
if (find)
break;
}
if (pos == n)
break;
std::string line = c + buffer.substr(0, pos); // 截取从开头到!之前的数据
buffer = buffer.substr(pos + 1); // 更新buffer为剩余数据
// std::cout << "[line]:" + line + "\n";
if (pos != 0)
callback(line);
}
}
}
void handle_buffer_head_tail(std::string& buffer, std::string_view data, std::string_view prefix,
std::string_view suffix, const std::function<void(std::string&)>& callback) {
// 只在数据可用时进行读取
if (!data.empty()) {
buffer += data;
size_t pos;
while ((pos = buffer.find_first_of(suffix)) != std::string::npos) {
size_t start = buffer.find_first_of(prefix);
if (start == std::string::npos)
break;
std::string packet = buffer.substr(start + 1, pos - start - 1);
buffer.erase(0, pos + 1);
// 处理尾部空格
while (!buffer.empty() && buffer.back() == '\n') {
buffer.pop_back();
}
if (!packet.empty()) {
callback(packet);
}
}
}
}
void read_ais_serial_data(std::atomic<bool>& running) {
// static int t = config.ais.read_serial_milliseconds;
// static bool ais_log = config.console_config.ais_serial;
// static bool use_ais_serial = !config.ais_mock.enable ||
// config.ais_mock.use_real_serial; static auto lm =
// Light_Manager::instance(); serial::Serial* ais_serial{}; if
// (use_ais_serial) ais_serial = create_serial(config.ais.port_name,
// config.ais.baud_rate); libais::VdmStream stream; std::string ais_buffer;
// while (running.load(std::memory_order_acquire) == true)
// {
// std::string ais_data = use_ais_serial ? ais_serial->read() :
// mock_ais_serial.read(); if (!ais_data.empty())
// {
// if (ais_log && !ais_data.empty())
// {
// std::cout << "read:[ais_serial]:" << ais_data << std::endl;
// }
// libais::libais_logger->debug("ais_serial_read/ais_serial_read", {},
// ais_data + "\n"); handle_buffer_muti_start(ais_buffer, ais_data,
// {"!", "$"}, [&](std::string& line) {
// lm->light_control(Light_Type::AIS, true);
// stream.AddLine(line);
// while (auto msg = stream.PopOldestMessage())
// {
// parse_ais(msg.get());
// }
// lm->light_control(Light_Type::AIS, false);
// });
// }
// std::this_thread::sleep_for(std::chrono::milliseconds(t));
// }
// delete ais_serial;
}
bool is_10004(SSR::Mode_S_Msg& msg) {
bool DF_11_17_18 = msg.df == SSR::Downlink_Format::All_Call_Reply_11 ||
msg.df == SSR::Downlink_Format::Extended_Squitter_17 ||
msg.df == SSR::Downlink_Format::Extended_Squitter_Non_Transponder_18;
return DF_11_17_18;
}
std::string to_file_name(std::string_view str) {
auto ret = std::string(str);
// 定义允许的合法字符
auto is_valid_char = [](char c) {
return std::isalnum(c) || c == '_' || c == '-' || c == '.'; // 允许字母、数字、下划线、连字符、点
};
// 替换非法字符为下划线 '_'
std::transform(ret.begin(), ret.end(), ret.begin(), [&](char c) { return is_valid_char(c) ? c : '_'; });
// 检查结果字符串是否全是替换字符,防止生成全是下划线的文件名
if (ret.find_first_not_of('_') == std::string::npos) {
return "default_file_name"; // 返回一个默认文件名
}
return ret;
}
void Debug_Logger_Info_Manager::push_info(std::string_view c) {
std::lock_guard g(mtx);
std::string content = std::to_string(cur_serial_number) + ": " + std::string(c);
@@ -361,34 +226,6 @@ Web_Server& Web_Server::Get(std::string_view pattern, Handler handler) {
{drogon::Get});
return *this;
}
Web_Server& Web_Server::Get_Coro(std::string_view pattern, CoroHandler handler) {
drogon::app().registerHandlerViaRegex(
std::string(pattern),
[handler = std::move(handler)](const drogon::HttpRequestPtr& request,
std::function<void(const drogon::HttpResponsePtr&)>&& callback) {
auto resp = drogon::HttpResponse::newHttpResponse();
resp->setContentTypeCode(drogon::CT_APPLICATION_JSON);
drogon::async_run([handler, request, resp, callback = std::move(callback)]() mutable -> drogon::Task<> {
try {
co_await handler(request, resp);
}
catch (const std::exception& error) {
resp->setStatusCode(drogon::k500InternalServerError);
resp->setBody(Psc::JSON::object({{"error", std::string(error.what())}}).to_json_string());
std::terminate();
}
catch (...) {
resp->setStatusCode(drogon::k500InternalServerError);
resp->setBody(Psc::JSON::object({{"error", "unknown error"}}).to_json_string());
std::terminate();
}
callback(resp);
co_return;
});
},
{drogon::Get});
return *this;
}
std::string Debug_Logger_Info_Manager::get_info(Serial_Number_Type serial_number) {
std::lock_guard g(mtx);
std::string result;