57 lines
1.4 KiB
C++
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;
|
|
}; |