Files
wnmj-normal/Servers/服务器组件/内核引擎/AsynchronismEngine.h
2026-03-03 13:56:44 +08:00

150 lines
3.2 KiB
C++

#ifndef ASYNCHRONISM_ENGINE_HEAD_FILE
#define ASYNCHRONISM_ENGINE_HEAD_FILE
#pragma once
#include "KernelEngineHead.h"
//类说明
class CAsynchronismEngine;
typedef class CWHArray<IAsynchronismEngineSink *> CAsynchronismEngineSinkArray;
//////////////////////////////////////////////////////////////////////////
//控制窗口
class CControlWnd : public CWnd
{
//变量定义
public:
CAsynchronismEngine * m_pAsynchronismEngine; //异步引擎
//函数定义
public:
//构造函数
CControlWnd();
//析构函数
virtual ~CControlWnd();
//消息映射
protected:
//请求消息
HRESULT OnAsynRequest(WPARAM wParam, LPARAM lParam);
DECLARE_MESSAGE_MAP()
};
//////////////////////////////////////////////////////////////////////////
//消息线程
class CMessageThread : public CWHThread
{
//变量定义
public:
CAsynchronismEngine * m_pAsynchronismEngine; //异步引擎
//函数定义
public:
//构造函数
CMessageThread();
//析构函数
virtual ~CMessageThread();
//功能函数
public:
//停止线程
virtual bool StopThread(DWORD dwWaitSeconds = INFINITE);
//中止线程
virtual bool TerminateThread(DWORD dwExitCode);
//事件函数
private:
//开始事件
virtual bool OnThreadStratEvent();
//停止事件
virtual bool OnThreadStopEvent();
//重载函数
private:
//运行函数
virtual bool OnEventThreadRun();
};
//////////////////////////////////////////////////////////////////////////
//异步引擎
class CAsynchronismEngine : public IAsynchronismEngine
{
friend class CControlWnd;
friend class CMessageThread;
//内核变量
protected:
bool m_bService; //服务标志
BYTE m_cbBuffer[MAX_ASYNCHRONISM_DATA]; //数据缓冲
CAsynchronismEngineSinkArray m_AsynchronismEngineSinkArray; //异步钩子
//组件变量
protected:
CControlWnd m_ControlWnd; //控制窗口
CCriticalSection m_CriticalSection; //线程锁
CWHDataQueue m_DataStorage; //数据存储
CMessageThread m_MessageThread; //线程组件
//函数定义
public:
//构造函数
CAsynchronismEngine(void);
//析构函数
virtual ~CAsynchronismEngine(void);
//基础接口
public:
//释放对象
virtual VOID Release()
{
if (IsValid()) delete this; //
}
//是否有效
virtual bool IsValid()
{
return AfxIsValidAddress(this, sizeof(CAsynchronismEngine)) ? true : false;
}
//接口查询
virtual void * QueryInterface(const IID & Guid, DWORD dwQueryVer);
//管理接口
public:
//启动服务
virtual bool StartService();
//停止服务
virtual bool ConcludeService();
//插入请求
virtual bool InsertRequest(WORD wRequestID, void * const pBuffer, WORD wDataSize, IUnknownEx * pIUnknownEx);
//功能接口
public:
//队列负荷
virtual bool GetBurthenInfo(tagBurthenInfo & BurthenInfo);
//注册钩子
virtual bool SetAsynchronismSink(IUnknownEx * pIUnknownEx);
//投递数据
virtual bool PostAsynchronismData(WORD wIdentifier, VOID * pData, WORD wDataSize);
//投递数据
virtual bool PostAsynchronismData(WORD wIdentifier, tagDataBuffer DataBuffer[], WORD wDataCount);
//取消注册
virtual bool UnRegisterAsynchronismEngineSink(IUnknownEx * pIUnknownEx);
//线程函数
protected:
//线程启动
bool OnMessageThreadStart();
//线程停止
bool OnMessageThreadStop();
//异步请求
void OnAsynchronismRequest(WORD wRequestID, IAsynchronismEngineSink * pIAsynchronismEngineSink);
};
//////////////////////////////////////////////////////////////////////////
#endif