#ifndef QUEUE_SERVICE_HEAD_FILE #define QUEUE_SERVICE_HEAD_FILE #include "KernelEngineHead.h" #define VER_IQueueServiceSink INTERFACE_VERSION(1,1) static const GUID IID_IQueueServiceSink = { 0x88b5bf59, 0x3a98, 0x43b1, 0xac, 0x85, 0xf1, 0x17, 0x5b, 0x29, 0x69, 0x40 }; //数据队列类钩子接口 interface IQueueServiceSink : public IUnknownEx { //通知回调函数 virtual void OnQueueServiceSink(WORD wIdentifier, void * pBuffer, WORD wDataSize) = NULL; }; ////////////////////////////////////////////////////////////////////////// #define VER_IQueueService INTERFACE_VERSION(1,1) static const GUID IID_IQueueService = { 0xcc5310b5, 0x3709, 0x40aa, 0x85, 0x24, 0xd6, 0xc5, 0x87, 0xb0, 0x32, 0x22 }; //队列接口 interface IQueueService : public IServiceModule { //设置接口 virtual bool SetQueueServiceSink(IUnknownEx * pIUnknownEx) = NULL; //负荷信息 virtual bool GetBurthenInfo(tagBurthenInfo & BurthenInfo) = NULL; //加入数据 virtual bool AddToQueue(WORD wIdentifier, void * const pBuffer, WORD wDataSize) = NULL; }; ////////////////////////////////////////////////////////////////////////// //队列线程类 class CQueueServiceThread : public CWHThread { //友员定义 friend class CQueueService; //配置定义 protected: HANDLE m_hCompletionPort; //完成端口 //辅助变量 private: BYTE m_cbBuffer[MAX_ASYNCHRONISM_DATA]; //接收缓冲 //函数定义 protected: //构造函数 CQueueServiceThread(void); //析构函数 virtual ~CQueueServiceThread(void); //功能函数 public: //配置函数 bool InitThread(HANDLE hCompletionPort); //取消配置 bool UnInitThread(); //重载函数 private: //运行函数 virtual bool OnEventThreadRun(); }; ////////////////////////////////////////////////////////////////////////// //数据队列类 class CQueueService : public IQueueService { friend class CQueueServiceThread; //变量定义 protected: bool m_bService; //服务标志 HANDLE m_hCompletionPort; //完成端口 IQueueServiceSink * m_pIQueueServiceSink; //回调接口 //组件变量 protected: CCriticalSection m_CriticalSection; //线程锁 CWHDataQueue m_DataQueue; //数据存储 CQueueServiceThread m_QueueServiceThread; //队列线程 //函数定义 public: //构造函数 CQueueService(void); //析构函数 virtual ~CQueueService(void); //基础接口 public: //释放对象 virtual VOID Release() { if (IsValid()) delete this; // } //是否有效 virtual bool IsValid() { return AfxIsValidAddress(this, sizeof(CQueueService)) ? true : false; } //接口查询 virtual void * QueryInterface(const IID & Guid, DWORD dwQueryVer); //管理接口 public: //开始服务 virtual bool StartService(); //停止服务 virtual bool ConcludeService(); //线程句柄 HANDLE GetThreadHandle(); //队列接口 public: //加入数据 virtual bool AddToQueue(WORD wIdentifier, void * const pBuffer, WORD wDataSize); //设置接口 virtual bool SetQueueServiceSink(IUnknownEx * pIUnknownEx); //负荷信息 virtual bool GetBurthenInfo(tagBurthenInfo & BurthenInfo); //辅助函数 private: //提取数据 bool GetData(tagDataHead & DataHead, void * pBuffer, WORD wBufferSize); //数据消息 void OnQueueServiceThread(const tagDataHead & DataHead, void * pBuffer, WORD wDataSize); }; ////////////////////////////////////////////////////////////////////////// #endif