Files

249 lines
7.2 KiB
C
Raw Permalink Normal View History

2026-03-03 13:56:44 +08:00
#ifndef QUEUE_SERVICE_EVENT_HEAD_FILE
#define QUEUE_SERVICE_EVENT_HEAD_FILE
#pragma once
#include "KernelEngineHead.h"
#include "QueueService.h"
//////////////////////////////////////////////////////////////////////////
//<2F><><EFBFBD>ݶ<EFBFBD><DDB6><EFBFBD><EFBFBD>¼<EFBFBD>
class CQueueServiceEvent
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
public:
CCriticalSection m_CriticalSection; //ͬ<><CDAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CQueueService m_pIQueueService; //<2F><><EFBFBD>нӿ<D0BD>
BYTE m_cbBuffer[MAX_ASYNCHRONISM_DATA]; //<2F><><EFBFBD>ջ<EFBFBD><D5BB><EFBFBD>
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
public:
//<2F><><EFBFBD><EFBFBD><ECBAAF>
CQueueServiceEvent()
{
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
virtual ~CQueueServiceEvent()
{
}
//<2F>߳̾<DFB3><CCBE><EFBFBD>
HANDLE GetThreadHandle()
{
return m_pIQueueService.GetThreadHandle();
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
public:
//<2F><><EFBFBD>ýӿ<C3BD>
bool SetQueueServiceSink(IUnknownEx * pIUnknownEx)
{
if (NULL != pIUnknownEx)
{
bool bRet = m_pIQueueService.SetQueueServiceSink(pIUnknownEx);
if (bRet)
bRet = m_pIQueueService.StartService();
return bRet;
}
else
{
m_pIQueueService.ConcludeService();
return true;
}
}
//֪ͨ<CDA8><D6AA><EFBFBD><EFBFBD>
public:
//<2F><>ʱ<EFBFBD><CAB1><EFBFBD>¼<EFBFBD>
bool PostTimerEvent(DWORD wTimerID, WPARAM wBindParam)
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CWHDataLocker lock(m_CriticalSection);
//Ͷ<><CDB6><EFBFBD><EFBFBD>Ϣ
NTY_TimerEvent * pTimerEvent = (NTY_TimerEvent *)m_cbBuffer;
pTimerEvent->dwTimerID = wTimerID;
pTimerEvent->dwBindParameter = wBindParam;
m_pIQueueService.AddToQueue(EVENT_TIMER, m_cbBuffer, sizeof(NTY_TimerEvent));
return true;
}
//<2F><><EFBFBD>ݿ<EFBFBD><DDBF>¼<EFBFBD>
bool PostDataBaseEvent(WORD wRequestID, DWORD dwContextID, const void * pDataBuffer, WORD wDataSize)
{
ASSERT((wDataSize + sizeof(NTY_DataBaseEvent)) <= MAX_ASYNCHRONISM_DATA);
if ((wDataSize + sizeof(NTY_DataBaseEvent)) > MAX_ASYNCHRONISM_DATA) return false;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CWHDataLocker lock(m_CriticalSection);
//Ͷ<><CDB6><EFBFBD><EFBFBD>Ϣ
NTY_DataBaseEvent * pDataBaseEvent = (NTY_DataBaseEvent *)m_cbBuffer;
pDataBaseEvent->wRequestID = wRequestID;
pDataBaseEvent->dwContextID = dwContextID;
if (wDataSize > 0)
{
ASSERT(pDataBuffer != NULL);
CopyMemory(m_cbBuffer + sizeof(NTY_DataBaseEvent), pDataBuffer, wDataSize);
}
m_pIQueueService.AddToQueue(EVENT_DATABASE, m_cbBuffer, sizeof(NTY_DataBaseEvent) + wDataSize);
return true;
}
//<2F><><EFBFBD>ݿ<EFBFBD><DDBF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD>
bool PostControlEvent(WORD wControlID, VOID * pData, WORD wDataSize)
{
//Ч<><D0A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ASSERT((wDataSize + sizeof(NTY_ControlEvent)) <= MAX_ASYNCHRONISM_DATA);
if ((wDataSize + sizeof(NTY_ControlEvent)) > MAX_ASYNCHRONISM_DATA) return false;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CWHDataLocker lock(m_CriticalSection);
//Ͷ<><CDB6><EFBFBD><EFBFBD>Ϣ
NTY_ControlEvent * pDataBaseEvent = (NTY_ControlEvent *)m_cbBuffer;
pDataBaseEvent->wControlID = wControlID;
if (wDataSize > 0)
{
ASSERT(pData != NULL);
CopyMemory(m_cbBuffer + sizeof(NTY_ControlEvent), pData, wDataSize);
}
m_pIQueueService.AddToQueue(EVENT_CONTROL, m_cbBuffer, sizeof(NTY_ControlEvent) + wDataSize);
return true;
}
//SOCKET<45><54><EFBFBD><EFBFBD>
//////////////////////////////////////////////////////////////////////////
//<2F><><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD>¼<EFBFBD>
bool PostNetworkAcceptEvent(DWORD dwSocketID, DWORD dwClientAddr)
{
//Ч<><D0A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ASSERT(sizeof(NTY_TCPNetworkAcceptEvent) <= MAX_ASYNCHRONISM_DATA);
if (sizeof(NTY_TCPNetworkAcceptEvent) > MAX_ASYNCHRONISM_DATA) return false;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CWHDataLocker lock(m_CriticalSection);
//Ͷ<><CDB6><EFBFBD><EFBFBD>Ϣ
NTY_TCPNetworkAcceptEvent * pSocketAcceptEvent = (NTY_TCPNetworkAcceptEvent *)m_cbBuffer;
pSocketAcceptEvent->dwSocketID = dwSocketID;
pSocketAcceptEvent->dwClientAddr = dwClientAddr;
m_pIQueueService.AddToQueue(EVENT_TCP_NETWORK_ACCEPT, m_cbBuffer, sizeof(NTY_TCPNetworkAcceptEvent));
return true;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD>¼<EFBFBD>
bool PostNetworkReadEvent(DWORD dwSocketID, TCP_Command Command, const void * pDataBuffer, WORD wDataSize)
{
//Ч<><D0A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ASSERT((wDataSize + sizeof(NTY_TCPNetworkReadEvent)) <= MAX_ASYNCHRONISM_DATA);
if ((wDataSize + sizeof(NTY_TCPNetworkReadEvent)) > MAX_ASYNCHRONISM_DATA) return false;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CWHDataLocker lock(m_CriticalSection);
//Ͷ<><CDB6><EFBFBD><EFBFBD>Ϣ
NTY_TCPNetworkReadEvent * pSocketReadEvent = (NTY_TCPNetworkReadEvent *)m_cbBuffer;
pSocketReadEvent->dwSocketID = dwSocketID;
pSocketReadEvent->Command = Command;
pSocketReadEvent->wDataSize = wDataSize;
if (wDataSize > 0)
{
ASSERT(pDataBuffer != NULL);
CopyMemory(m_cbBuffer + sizeof(NTY_TCPNetworkReadEvent), pDataBuffer, wDataSize);
}
m_pIQueueService.AddToQueue(EVENT_TCP_NETWORK_READ, m_cbBuffer, sizeof(NTY_TCPNetworkReadEvent) + wDataSize);
return true;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD>ر<EFBFBD><D8B1>¼<EFBFBD>
bool PostNetworkShutEvent(DWORD dwSocketID, DWORD dwClientAddr, DWORD dwActiveTime)
{
//Ч<><D0A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ASSERT(sizeof(NTY_TCPNetworkShutEvent) <= MAX_ASYNCHRONISM_DATA);
if (sizeof(NTY_TCPNetworkShutEvent) > MAX_ASYNCHRONISM_DATA) return false;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CWHDataLocker lock(m_CriticalSection);
//Ͷ<><CDB6><EFBFBD><EFBFBD>Ϣ
NTY_TCPNetworkShutEvent * pNetworkShutEvent = (NTY_TCPNetworkShutEvent *)m_cbBuffer;
pNetworkShutEvent->dwSocketID = dwSocketID;
pNetworkShutEvent->dwActiveTime = dwActiveTime;
pNetworkShutEvent->dwClientAddr = dwClientAddr;
m_pIQueueService.AddToQueue(EVENT_TCP_NETWORK_SHUT, m_cbBuffer, sizeof(NTY_TCPNetworkShutEvent));
return true;
}
//SOCKET<45><54><EFBFBD><EFBFBD>
//////////////////////////////////////////////////////////////////////////
//<2F><><EFBFBD><EFBFBD><EFBFBD>ر<EFBFBD><D8B1>¼<EFBFBD>
bool PostTCPSocketShutEvent(WORD wServiceID, BYTE cbShutReason)
{
//Ч<><D0A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ASSERT(sizeof(NTY_TCPSocketShutEvent) <= MAX_ASYNCHRONISM_DATA);
if (sizeof(NTY_TCPSocketShutEvent) > MAX_ASYNCHRONISM_DATA) return false;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CWHDataLocker lock(m_CriticalSection);
//Ͷ<><CDB6><EFBFBD><EFBFBD>Ϣ
NTY_TCPSocketShutEvent * pSocketShutEvent = (NTY_TCPSocketShutEvent *)m_cbBuffer;
pSocketShutEvent->wServiceID = wServiceID;
pSocketShutEvent->cbShutReason = cbShutReason;
return m_pIQueueService.AddToQueue(EVENT_TCP_SOCKET_SHUT, m_cbBuffer, sizeof(NTY_TCPSocketShutEvent));
}
//<2F><><EFBFBD><EFBFBD><EFBFBD>ر<EFBFBD><D8B1>¼<EFBFBD>
bool PostTCPSocketReadEvent(WORD wServiceID, TCP_Command Command, const void * pDataBuffer, WORD wDataSize)
{
//Ч<><D0A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ASSERT((wDataSize + sizeof(NTY_TCPSocketReadEvent)) <= MAX_ASYNCHRONISM_DATA);
if ((wDataSize + sizeof(NTY_TCPSocketReadEvent)) > MAX_ASYNCHRONISM_DATA) return false;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CWHDataLocker lock(m_CriticalSection);
//Ͷ<><CDB6><EFBFBD><EFBFBD>Ϣ
NTY_TCPSocketReadEvent * pSocketCloseEvent = (NTY_TCPSocketReadEvent *)m_cbBuffer;
pSocketCloseEvent->wDataSize = wDataSize;
pSocketCloseEvent->wServiceID = wServiceID;
pSocketCloseEvent->Command = Command;
if (wDataSize > 0)
{
ASSERT(pDataBuffer != NULL);
CopyMemory(m_cbBuffer + sizeof(NTY_TCPSocketReadEvent), pDataBuffer, wDataSize);
}
m_pIQueueService.AddToQueue(EVENT_TCP_SOCKET_READ, m_cbBuffer, sizeof(NTY_TCPSocketReadEvent) + wDataSize);
return true;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD>ر<EFBFBD><D8B1>¼<EFBFBD>
bool PostTCPSocketLinkEvent(WORD wServiceID, INT nErrorCode)
{
//Ч<><D0A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ASSERT(sizeof(NTY_TCPSocketLinkEvent) <= MAX_ASYNCHRONISM_DATA);
if (sizeof(NTY_TCPSocketLinkEvent) > MAX_ASYNCHRONISM_DATA) return false;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CWHDataLocker lock(m_CriticalSection);
//Ͷ<><CDB6><EFBFBD><EFBFBD>Ϣ
NTY_TCPSocketLinkEvent * pSocketLinkEvent = (NTY_TCPSocketLinkEvent *)m_cbBuffer;
pSocketLinkEvent->wServiceID = wServiceID;
pSocketLinkEvent->nErrorCode = nErrorCode;
m_pIQueueService.AddToQueue(EVENT_TCP_SOCKET_LINK, m_cbBuffer, sizeof(NTY_TCPSocketLinkEvent));
return true;
}
};
//////////////////////////////////////////////////////////////////////////
#endif