add old lci module

This commit is contained in:
qing committed 2026-08-02 20:15:07 +08:00
1 parent 38a6e815f0
commit 8499631091
171 files changed
+25562

No files matched your search

+193
View File
@@ -0,0 +1,193 @@
#ifndef HTTPSERVER_HPP
#define HTTPSERVER_HPP
#include <boost/asio.hpp>
#include <boost/beast.hpp>
#include <boost/beast/http.hpp>
#include <boost/beast/version.hpp>
#include <boost/asio/ip/tcp.hpp>
#include <boost/asio/strand.hpp>
#include <boost/config.hpp>
#include <memory>
#include <string>
#include <functional>
#include <unordered_map>
#include <vector>
#include <iostream>
#include <thread>
#include <atomic>
namespace beast = boost::beast;
namespace http = beast::http;
namespace asio = boost::asio;
using tcp = boost::asio::ip::tcp;
namespace pmc {
namespace net {
/**
* @brief HTTP请求处理器类型定义
*
* 处理HTTP请求并返回响应
*/
using HttpRequestHandler = std::function<http::response<http::string_body>(
const http::request<http::string_body>&,
const std::unordered_map<std::string, std::string>&)>;
/**
* @brief 中间件处理器类型定义
*
* 用于处理请求链的中间件
*/
using MiddlewareHandler = std::function<bool(
const http::request<http::string_body>&,
http::response<http::string_body>&,
const std::unordered_map<std::string, std::string>&)>;
/**
* @brief HTTP服务器类(合并增强版)
*
* 基于boost::asio和boost::beast的异步HTTP服务器
* 结合了原始版本的易用性和修复版本的功能完整性
*/
class HttpServer {
public:
/**
* @brief 构造函数(监听所有接口)
* @param port 监听端口
* @param threads 工作线程数
*/
explicit HttpServer(unsigned short port, unsigned int threads = 1);
/**
* @brief 构造函数(指定监听地址)
* @param address 监听IP地址(如 "0.0.0.0" 或 "127.0.0.1")
* @param port 监听端口
* @param threads 工作线程数
*/
explicit HttpServer(const std::string& address, unsigned short port, unsigned int threads = 1);
/**
* @brief 析构函数
*/
~HttpServer();
/**
* @brief 启动服务器
*/
void start();
/**
* @brief 停止服务器
*/
void stop();
/**
* @brief 注册GET请求处理器
* @param path 请求路径
* @param handler 请求处理器
*/
void get(const std::string& path, HttpRequestHandler handler);
/**
* @brief 注册POST请求处理器
* @param path 请求路径
* @param handler 请求处理器
*/
void post(const std::string& path, HttpRequestHandler handler);
/**
* @brief 注册PUT请求处理器
* @param path 请求路径
* @param handler 请求处理器
*/
void put(const std::string& path, HttpRequestHandler handler);
/**
* @brief 注册DELETE请求处理器
* @param path 请求路径
* @param handler 请求处理器
*/
void del(const std::string& path, HttpRequestHandler handler);
/**
* @brief 注册中间件
* @param middleware 中间件处理器
*/
void use(MiddlewareHandler middleware);
/**
* @brief 设置静态文件目录
* @param path 静态文件目录路径
*/
void setStaticDirectory(const std::string& path);
/**
* @brief 获取服务器状态
* @return 服务器是否正在运行
*/
bool isRunning() const;
/**
* @brief 获取服务器端口
* @return 服务器监听端口
*/
unsigned short getPort() const;
/**
* @brief 获取服务器监听地址
* @return 服务器监听地址
*/
std::string getAddress() const;
/**
* @brief 运行服务器(阻塞调用)- 从原始版本继承
*/
void run();
/**
* @brief 显示服务器状态信息 - 从原始版本继承
*/
void showStatus() const;
private:
// 内部类声明
class Session;
class Listener;
// 服务器配置
std::string address_;
unsigned short port_;
unsigned int threads_;
std::atomic<bool> running_{false};
// Boost.Asio上下文
std::unique_ptr<asio::io_context> ioc_;
// 网络组件
std::shared_ptr<Listener> listener_;
std::vector<std::thread> worker_threads_;
// 路由表
std::unordered_map<std::string, HttpRequestHandler> get_handlers_;
std::unordered_map<std::string, HttpRequestHandler> post_handlers_;
std::unordered_map<std::string, HttpRequestHandler> put_handlers_;
std::unordered_map<std::string, HttpRequestHandler> delete_handlers_;
// 中间件链
std::vector<MiddlewareHandler> middlewares_;
// 静态文件目录
std::string static_directory_;
// 内部方法
std::unordered_map<std::string, std::string> parseQueryParams(const std::string& query);
// 请求处理
http::response<http::string_body> handleRequest(const http::request<http::string_body>& req);
};
} // namespace net
} // namespace pmc
#endif // HTTPSERVER_HPP