Files
wnmj-normal/Servers/服务器组件/内核引擎/AsynchronismEngine.h

150 lines
3.2 KiB
C
Raw Normal View History

2026-03-03 13:56:44 +08:00
#ifndef ASYNCHRONISM_ENGINE_HEAD_FILE
#define ASYNCHRONISM_ENGINE_HEAD_FILE
#pragma once
#include "KernelEngineHead.h"
//<2F><>˵<EFBFBD><CBB5>
class CAsynchronismEngine;
typedef class CWHArray<IAsynchronismEngineSink *> CAsynchronismEngineSinkArray;
//////////////////////////////////////////////////////////////////////////
//<2F><><EFBFBD>ƴ<EFBFBD><C6B4><EFBFBD>
class CControlWnd : public CWnd
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
public:
CAsynchronismEngine * m_pAsynchronismEngine; //<2F><EFBFBD><ECB2BD><EFBFBD><EFBFBD>
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
public:
//<2F><><EFBFBD><EFBFBD><ECBAAF>
CControlWnd();
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
virtual ~CControlWnd();
//<2F><>Ϣӳ<CFA2><D3B3>
protected:
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
HRESULT OnAsynRequest(WPARAM wParam, LPARAM lParam);
DECLARE_MESSAGE_MAP()
};
//////////////////////////////////////////////////////////////////////////
//<2F><>Ϣ<EFBFBD>߳<EFBFBD>
class CMessageThread : public CWHThread
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
public:
CAsynchronismEngine * m_pAsynchronismEngine; //<2F><EFBFBD><ECB2BD><EFBFBD><EFBFBD>
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
public:
//<2F><><EFBFBD><EFBFBD><ECBAAF>
CMessageThread();
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
virtual ~CMessageThread();
//<2F><><EFBFBD>ܺ<EFBFBD><DCBA><EFBFBD>
public:
//ֹͣ<CDA3>߳<EFBFBD>
virtual bool StopThread(DWORD dwWaitSeconds = INFINITE);
//<2F><>ֹ<EFBFBD>߳<EFBFBD>
virtual bool TerminateThread(DWORD dwExitCode);
//<2F>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD>
private:
//<2F><>ʼ<EFBFBD>¼<EFBFBD>
virtual bool OnThreadStratEvent();
//ֹͣ<CDA3>¼<EFBFBD>
virtual bool OnThreadStopEvent();
//<2F><><EFBFBD>غ<EFBFBD><D8BA><EFBFBD>
private:
//<2F><><EFBFBD>к<EFBFBD><D0BA><EFBFBD>
virtual bool OnEventThreadRun();
};
//////////////////////////////////////////////////////////////////////////
//<2F><EFBFBD><ECB2BD><EFBFBD><EFBFBD>
class CAsynchronismEngine : public IAsynchronismEngine
{
friend class CControlWnd;
friend class CMessageThread;
//<2F>ں˱<DABA><CBB1><EFBFBD>
protected:
bool m_bService; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־
BYTE m_cbBuffer[MAX_ASYNCHRONISM_DATA]; //<2F><><EFBFBD>ݻ<EFBFBD><DDBB><EFBFBD>
CAsynchronismEngineSinkArray m_AsynchronismEngineSinkArray; //<2F><EFBFBD><ECB2BD><EFBFBD><EFBFBD>
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
protected:
CControlWnd m_ControlWnd; //<2F><><EFBFBD>ƴ<EFBFBD><C6B4><EFBFBD>
CCriticalSection m_CriticalSection; //<2F>߳<EFBFBD><DFB3><EFBFBD>
CWHDataQueue m_DataStorage; //<2F><><EFBFBD>ݴ洢
CMessageThread m_MessageThread; //<2F>߳<EFBFBD><DFB3><EFBFBD><EFBFBD><EFBFBD>
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
public:
//<2F><><EFBFBD><EFBFBD><ECBAAF>
CAsynchronismEngine(void);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
virtual ~CAsynchronismEngine(void);
//<2F><><EFBFBD><EFBFBD><EFBFBD>ӿ<EFBFBD>
public:
//<2F>ͷŶ<CDB7><C5B6><EFBFBD>
virtual VOID Release()
{
if (IsValid()) delete this; //
}
//<2F>Ƿ<EFBFBD><C7B7><EFBFBD>Ч
virtual bool IsValid()
{
return AfxIsValidAddress(this, sizeof(CAsynchronismEngine)) ? true : false;
}
//<2F>ӿڲ<D3BF>ѯ
virtual void * QueryInterface(const IID & Guid, DWORD dwQueryVer);
//<2F><><EFBFBD><EFBFBD><EFBFBD>ӿ<EFBFBD>
public:
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
virtual bool StartService();
//ֹͣ<CDA3><D6B9><EFBFBD><EFBFBD>
virtual bool ConcludeService();
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
virtual bool InsertRequest(WORD wRequestID, void * const pBuffer, WORD wDataSize, IUnknownEx * pIUnknownEx);
//<2F><><EFBFBD>ܽӿ<DCBD>
public:
//<2F><><EFBFBD>и<EFBFBD><D0B8><EFBFBD>
virtual bool GetBurthenInfo(tagBurthenInfo & BurthenInfo);
//ע<><EFBFBD><E1B9B3>
virtual bool SetAsynchronismSink(IUnknownEx * pIUnknownEx);
//Ͷ<><CDB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
virtual bool PostAsynchronismData(WORD wIdentifier, VOID * pData, WORD wDataSize);
//Ͷ<><CDB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
virtual bool PostAsynchronismData(WORD wIdentifier, tagDataBuffer DataBuffer[], WORD wDataCount);
//ȡ<><C8A1>ע<EFBFBD><D7A2>
virtual bool UnRegisterAsynchronismEngineSink(IUnknownEx * pIUnknownEx);
//<2F>̺߳<DFB3><CCBA><EFBFBD>
protected:
//<2F>߳<EFBFBD><DFB3><EFBFBD><EFBFBD><EFBFBD>
bool OnMessageThreadStart();
//<2F>߳<EFBFBD>ֹͣ
bool OnMessageThreadStop();
//<2F><EFBFBD><ECB2BD><EFBFBD><EFBFBD>
void OnAsynchronismRequest(WORD wRequestID, IAsynchronismEngineSink * pIAsynchronismEngineSink);
};
//////////////////////////////////////////////////////////////////////////
#endif