GrabBag/Module/ZeroMQServer/_Inc/CVrZeroMQServer.h
2026-05-31 00:10:46 +08:00

57 lines
1.4 KiB
C++

#pragma once
#include <iostream>
#include <atomic>
#include <thread>
#include <mutex>
#include <vector>
#include <memory>
#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<bool> m_bRecv;
std::atomic<bool> m_bRecvWorking;
FunMQEvent m_funMQEvent;
FunServerRecvAndAck m_funRecvAck;
// Thread control
std::atomic<bool> m_bMonitor;
std::atomic<bool> m_bMonitorWorking;
std::vector<CVrZeroMQTask*> m_vecTask;
std::mutex m_mutexTask;
std::thread m_monitorThread;
std::thread m_workerThread;
// State management
std::atomic<bool> m_bInitialized;
};