fix(libhttp): 删除遗留 WebSocketServer/WebSocketClient 并同步 CMakeLists 与 Makefile

This commit is contained in:
qing committed 2026-08-03 23:46:10 +08:00
1 parent 2f5fe8baaa
commit b37bf255d9
10 files changed
+85 -1322

No files matched your search

-63
View File
@@ -1,63 +0,0 @@
#ifndef PMC_NET_WEBSOCKET_CLIENT_HPP
#define PMC_NET_WEBSOCKET_CLIENT_HPP
#include "WebSocketClientBase.hpp"
namespace pmc {
namespace net {
/**
* @brief Asynchronous WebSocket client based on Boost.Beast (non-SSL version)
*/
class WebSocketClient : public WebSocketClientBase {
public:
/**
* @brief Constructor
* @param host Server hostname or IP address
* @param port Server port number
* @param path WebSocket path (default "/")
*/
WebSocketClient(const std::string& host, const std::string& port, const std::string& path = "/");
/**
* @brief Destructor
*/
~WebSocketClient();
// Implement WebSocketClientBase interface
void setMessageCallback(MessageCallback callback) override;
void setErrorCallback(ErrorCallback callback) override;
void setConnectCallback(ConnectCallback callback) override;
void setCloseCallback(CloseCallback callback) override;
bool connect(int timeout_ms = 5000) override;
void disconnect() override;
bool isConnected() const override;
bool send(const std::string& message) override;
bool sendBinary(const void* data, size_t size) override;
void setAutoReconnect(bool enable, int interval_ms = 3000) override;
void setHeartbeatInterval(int interval_ms = 30000) override;
std::string getHost() const override;
std::string getPort() const override;
std::string getPath() const override;
// SSL/TLS related (non-SSL version returns default values)
bool isSecure() const override { return false; }
void setVerifyCertificate(bool verify) override { (void)verify;/* Ignored */ }
void setCertificateFile(const std::string& cert_file) override { (void)cert_file; /* Ignored */ }
void setPrivateKeyFile(const std::string& key_file) override { (void)key_file;/* Ignored */ }
void setCertificateAuthorityFile(const std::string& ca_file) override { (void)ca_file;/* Ignored */ }
private:
// Forward declaration of implementation class
class Impl;
std::unique_ptr<Impl> impl_;
};
} // namespace net
} // namespace pmc
#endif // PMC_NET_WEBSOCKET_CLIENT_HPP
-61
View File
@@ -1,61 +0,0 @@
#ifndef PMC_NET_WEBSOCKET_CLIENT_BASE_HPP
#define PMC_NET_WEBSOCKET_CLIENT_BASE_HPP
#include <string>
#include <functional>
#include <memory>
namespace pmc {
namespace net {
/**
* @brief WebSocket client base class
*
* Defines the common interface for all WebSocket clients
*/
class WebSocketClientBase {
public:
// Callback function types
using MessageCallback = std::function<void(const std::string&)>;
using ErrorCallback = std::function<void(const std::string&)>;
using ConnectCallback = std::function<void(bool)>;
using CloseCallback = std::function<void()>;
virtual ~WebSocketClientBase() = default;
// Callback setters
virtual void setMessageCallback(MessageCallback callback) = 0;
virtual void setErrorCallback(ErrorCallback callback) = 0;
virtual void setConnectCallback(ConnectCallback callback) = 0;
virtual void setCloseCallback(CloseCallback callback) = 0;
// Connection management
virtual bool connect(int timeout_ms = 5000) = 0;
virtual void disconnect() = 0;
virtual bool isConnected() const = 0;
// Message sending
virtual bool send(const std::string& message) = 0;
virtual bool sendBinary(const void* data, size_t size) = 0;
// Configuration options
virtual void setAutoReconnect(bool enable, int interval_ms = 3000) = 0;
virtual void setHeartbeatInterval(int interval_ms = 30000) = 0;
// Information retrieval
virtual std::string getHost() const = 0;
virtual std::string getPort() const = 0;
virtual std::string getPath() const = 0;
// SSL/TLS related
virtual bool isSecure() const = 0;
virtual void setVerifyCertificate(bool verify) = 0;
virtual void setCertificateFile(const std::string& cert_file) = 0;
virtual void setPrivateKeyFile(const std::string& key_file) = 0;
virtual void setCertificateAuthorityFile(const std::string& ca_file) = 0;
};
} // namespace net
} // namespace pmc
#endif // PMC_NET_WEBSOCKET_CLIENT_BASE_HPP
-176
View File
@@ -1,176 +0,0 @@
// WebSocketServer.hpp - WebSocket server header file
// Based on Boost.Beast and Boost.Asio
#ifndef PMC_NET_WEBSOCKETSERVER_HPP
#define PMC_NET_WEBSOCKETSERVER_HPP
#include <functional>
#include <string>
#include <memory>
#include <unordered_map>
#include <mutex>
#include <atomic>
#include <vector>
#include <thread>
#include <boost/asio/io_context.hpp>
#include <boost/asio/ip/tcp.hpp>
namespace pmc::net {
/**
* @brief WebSocket connection handler type definition
*
* Handles message sending and receiving after WebSocket connection is established
*/
using WebSocketMessageHandler = std::function<void(
const std::string& clientId,
const std::string& message,
std::function<void(const std::string&)> sendCallback)>;
/**
* @brief WebSocket connection callback type definition
*/
using WebSocketConnectHandler = std::function<void(
const std::string& clientId,
const std::string& remoteAddress)>;
/**
* @brief WebSocket disconnection callback type definition
*/
using WebSocketDisconnectHandler = std::function<void(
const std::string& clientId)>;
/**
* @brief WebSocket server class
*
* WebSocket server implemented based on Boost.Beast and Boost.Asio
*/
class WebSocketServer {
public:
/**
* @brief Constructor
* @param port Listening port
* @param threads Number of threads (default 2)
*/
WebSocketServer(unsigned short port, unsigned int threads = 2);
/**
* @brief Destructor
*/
~WebSocketServer();
/**
* @brief Start the server
*/
void start();
/**
* @brief Stop the server
*/
void stop();
/**
* @brief Register message handler
* @param path Path (for routing)
* @param handler Message handler
*/
void onMessage(const std::string& path, WebSocketMessageHandler handler);
/**
* @brief Register connection handler
* @param handler Connection handler
*/
void onConnect(WebSocketConnectHandler handler);
/**
* @brief Register disconnection handler
* @param handler Disconnection handler
*/
void onDisconnect(WebSocketDisconnectHandler handler);
/**
* @brief Send message to a specific client
* @param clientId Client ID
* @param message Message content
* @return Whether sending was successful
*/
bool sendToClient(const std::string& clientId, const std::string& message);
/**
* @brief Broadcast message to all clients
* @param message Message content
* @return Number of clients that successfully received the message
*/
size_t broadcast(const std::string& message);
/**
* @brief Disconnect a specific client
* @param clientId Client ID
*/
void disconnectClient(const std::string& clientId);
/**
* @brief Get the number of currently connected clients
* @return Number of clients
*/
size_t getClientCount() const;
/**
* @brief Check if the server is running
* @return Running status
*/
bool isRunning() const { return running_; }
/**
* @brief Get the server listening port
* @return Port number
*/
unsigned short getPort() const { return port_; }
private:
// Internal Session class
class Session;
// Internal Listener class
class Listener;
// Internal implementation structure
struct Impl {
boost::asio::io_context ioc_;
std::shared_ptr<Listener> listener_;
std::vector<std::thread> threads_;
};
// Server configuration
unsigned short port_;
unsigned int threads_;
std::atomic<bool> running_{false};
// Internal implementation
std::unique_ptr<Impl> impl_;
// Generate client ID
std::string generateClientId() const;
// Add client
void addClient(const std::string& clientId, std::shared_ptr<Session> session);
// Remove client
void removeClient(const std::string& clientId);
// Get client session
std::shared_ptr<Session> getClient(const std::string& clientId);
// Callback functions
std::unordered_map<std::string, WebSocketMessageHandler> messageHandlers_;
WebSocketConnectHandler connectHandler_;
WebSocketDisconnectHandler disconnectHandler_;
// Client management
mutable std::mutex clientsMutex_;
std::unordered_map<std::string, std::shared_ptr<Session>> clients_;
};
} // namespace pmc::net
#endif // PMC_NET_WEBSOCKETSERVER_HPP