WebSocketHandler.h 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. #pragma once
  2. #include "CommWrapperBase.h"
  3. #include "ActiveXWrapper.h"
  4. #include "DllWrapper.h"
  5. #include "WebSocketSession.h"
  6. #include <memory>
  7. #include <set>
  8. #include <mutex>
  9. #include <map>
  10. #include <chrono>
  11. #include <thread>
  12. #include <atomic>
  13. class WebSocketHandler {
  14. private:
  15. std::shared_ptr<CommWrapperBase> comm_wrapper_;
  16. std::set<std::shared_ptr<WebSocketSession>> connected_clients_;
  17. std::mutex clients_mutex_;
  18. bool use_dll_;
  19. // 超时检测相关
  20. std::map<int, std::chrono::steady_clock::time_point> last_activity_time_;
  21. std::mutex activity_mutex_;
  22. std::atomic<bool> timeout_thread_running_;
  23. std::thread timeout_check_thread_;
  24. const int TIMEOUT_SECONDS = 30;
  25. // 超时检测线程函数
  26. void TimeoutCheckThread();
  27. public:
  28. WebSocketHandler(bool use_dll = true);
  29. ~WebSocketHandler();
  30. // 初始化
  31. bool Initialize();
  32. // 清理资源
  33. void Cleanup();
  34. // 添加/移除客户端
  35. void AddClient(std::shared_ptr<WebSocketSession> session);
  36. void RemoveClient(std::shared_ptr<WebSocketSession> session);
  37. // 处理WebSocket消息
  38. void HandleMessage(std::shared_ptr<WebSocketSession> session, const std::string& message);
  39. // 处理具体的命令
  40. void HandleInitMonitor(std::shared_ptr<WebSocketSession> session, int port);
  41. void HandleStopPort(std::shared_ptr<WebSocketSession> session, int port);
  42. void HandleReadData(std::shared_ptr<WebSocketSession> session, int port, const std::string& data);
  43. void HandleWriteData(std::shared_ptr<WebSocketSession> session, int port, const std::string& data);
  44. // 发送响应
  45. void SendResponse(std::shared_ptr<WebSocketSession> session, const std::string& cmd, bool result, int port = 0);
  46. // 广播事件
  47. void BroadcastEvent(const std::string& cmd, int port, const std::string& data = "");
  48. // 处理通信事件
  49. void OnCommEvent(const CommEventData& event_data);
  50. // 更新端口活动时间
  51. void UpdatePortActivity(int port);
  52. // 更新端口活动时间
  53. void RemovePortActivity(int port);
  54. };