This commit is contained in:
cxh 2026-01-21 15:00:01 +08:00
parent 2759f86c76
commit 2cdd2d4f4f

View File

@ -1,28 +1,30 @@
#pragma once #pragma once
#include <atomic> #include <atomic>
#include <nlohmann/json.hpp>
#include <string> #include <string>
#include <thread> #include <thread>
#include <websocketpp/connection.hpp> #include <websocketpp/client.hpp>
#include <websocketpp/config/asio_no_tls_client.hpp>
namespace websocketpp // websocketpp 客户端类型
{ using ws_client = websocketpp::client<websocketpp::config::asio_client>;
namespace client
{
}
} // namespace websocketpp
class TunnelClient class TunnelClient
{ {
public: public:
TunnelClient(const std::string& vid, const std::string& server_ws_url, int local_http_port); TunnelClient(const std::string& vid, const std::string& server_ws_url, int local_http_port);
void start(); void start();
void stop(); void stop();
private: private:
void run_loop(); void run_loop();
// 新增:流式处理 & 安全发送 // 处理 Server 的 JSON 请求GET / POST / 大文件流)
void handle_request_and_reply(const nlohmann::json& req); void handle_request_and_reply(const nlohmann::json& req);
// 线程安全发送函数
void send_text_safe(const std::string& s); void send_text_safe(const std::string& s);
void send_binary_safe(const void* data, size_t len); void send_binary_safe(const void* data, size_t len);
@ -34,7 +36,7 @@ class TunnelClient
std::atomic<bool> running_{false}; std::atomic<bool> running_{false};
std::thread th_; std::thread th_;
// websocketpp 句柄 // websocketpp
ws_client* client_ = nullptr;
websocketpp::connection_hdl hdl_; websocketpp::connection_hdl hdl_;
ws_client* client_ = nullptr; // 指向 run_loop 的 client
}; };