#pragma once #include #include #include #include #include #include #include "IVrZeroMQServer.h" #include "CVrZeroMQTask.h" #define MAX_BUF_LEN 2048 class CVrZeroMQServer : public IVrZeroMQServer, public zmq::monitor_t { public: CVrZeroMQServer(); virtual ~CVrZeroMQServer(); /// 创建服务 int Init(int nPort, FunMQEvent funMQEvent, FunServerRecvAndAck funRecvAck, bool bMultitask = false) override; /// 销毁服务 int UnInit() override; private: // Monitor event handlers virtual void on_event_handshake_succeeded(const zmq_event_t& event_, const char* addr_) override; virtual void on_event_disconnected(const zmq_event_t& event_, const char* addr_) override; void _MonitorEvent(zmq::socket_t* socket); void _WorkerThread(); void _WorkTask(zmq::socket_t *socket); zmq::context_t* m_pContext; zmq::socket_t* m_pRouter; zmq::socket_t* m_pWorkers; zmq::socket_t* m_pSocket; std::thread m_recvThread; std::atomic m_bRecv; std::atomic m_bRecvWorking; FunMQEvent m_funMQEvent; FunServerRecvAndAck m_funRecvAck; // Thread control std::atomic m_bMonitor; std::atomic m_bMonitorWorking; std::vector m_vecTask; std::mutex m_mutexTask; std::thread m_monitorThread; std::thread m_workerThread; // State management std::atomic m_bInitialized; };