Files

523 lines
15 KiB
C++
Raw Permalink Normal View History

2026-03-03 13:56:44 +08:00
#include "StdAfx.h"
#include "TraceService.h" // #include "EventService.h"
#include "AttemperEngine.h"
//////////////////////////////////////////////////////////////////////////
//<2F><><EFBFBD><EFBFBD><ECBAAF>
CAttemperEngine::CAttemperEngine(void)
{
m_bService = false;
m_pITCPSocketService = NULL;
m_pTCPNetworkEngine = NULL;
m_pIAttemperEngineSink = NULL;
return;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CAttemperEngine::~CAttemperEngine(void)
{
}
//<2F>ӿڲ<D3BF>ѯ
void * CAttemperEngine::QueryInterface(const IID & Guid, DWORD dwQueryVer)
{
QUERYINTERFACE(IAttemperEngine, Guid, dwQueryVer);
QUERYINTERFACE(IQueueServiceSink, Guid, dwQueryVer);
QUERYINTERFACE(IDataBaseEngineEvent, Guid, dwQueryVer);
QUERYINTERFACE(ITCPNetworkEngineEvent, Guid, dwQueryVer);
QUERYINTERFACE_IUNKNOWNEX(IAttemperEngine, Guid, dwQueryVer);
return NULL;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
bool CAttemperEngine::StartService()
{
//<2F>ж<EFBFBD>״̬
if (m_bService)
{
CTraceService::TraceString(TEXT("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ظ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"), TraceLevel_Warning);
return true;
}
//<2F><><EFBFBD>ҽӿ<D2BD>
if (m_pIAttemperEngineSink == NULL)
{
CTraceService::TraceString(TEXT("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҷ<EFBFBD><EFBFBD>񲻴<EFBFBD><EFBFBD><EFBFBD>"), TraceLevel_Exception);
return false;
}
//<2F><><EFBFBD>ö<EFBFBD><C3B6><EFBFBD>
if ( !m_QueueService.SetQueueServiceSink(QUERY_ME_INTERFACE(IUnknownEx)) )
{
CTraceService::TraceString(TEXT("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>з<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD><EFBFBD>"), TraceLevel_Exception);
return false;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if ( !m_pIAttemperEngineSink->OnAttemperEngineStart(QUERY_ME_INTERFACE(IUnknownEx)) )
{
CTraceService::TraceString(TEXT("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD><EFBFBD>"), TraceLevel_Exception);
return false;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if ( !m_QueueService.StartService() )
{
CTraceService::TraceString(TEXT("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>з<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD><EFBFBD>"), TraceLevel_Exception);
return false;
}
////<2F><><EFBFBD>ջ<EFBFBD><D5BB><EFBFBD><EFBFBD><EFBFBD>
//m_AndroidUserSocketIDArray.RemoveAll();
//<2F><><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD>
m_bService = true;
return true;
}
//ֹͣ<CDA3><D6B9><EFBFBD><EFBFBD>
bool CAttemperEngine::ConcludeService()
{
//<2F><><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD>
m_bService = false;
//ֹͣ<CDA3><D6B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
m_QueueService.ConcludeService();
//ֹͣ<CDA3><D6B9><EFBFBD><EFBFBD>
if (m_pIAttemperEngineSink != NULL)
{
m_pIAttemperEngineSink->OnAttemperEngineConclude(QUERY_ME_INTERFACE(IUnknownEx));
m_pIAttemperEngineSink = NULL;
}
////<2F><><EFBFBD>ջ<EFBFBD><D5BB><EFBFBD><EFBFBD><EFBFBD>
//m_AndroidUserSocketIDArray.RemoveAll();
return true;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
bool CAttemperEngine::SetSocketEngine(IUnknownEx * pIUnknownEx)
{
ASSERT(pIUnknownEx != NULL);
m_pITCPSocketService = QUERY_OBJECT_PTR_INTERFACE(pIUnknownEx, ITCPSocketService);
ASSERT(m_pITCPSocketService != NULL);
return (m_pITCPSocketService != NULL);
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
bool CAttemperEngine::SetNetworkEngine(IUnknownEx * pIUnknownEx)
{
ASSERT(pIUnknownEx != NULL);
m_pTCPNetworkEngine = QUERY_OBJECT_PTR_INTERFACE(pIUnknownEx, ITCPNetworkEngine);
ASSERT(m_pTCPNetworkEngine != NULL);
return (m_pTCPNetworkEngine != NULL);
}
//ע<><EFBFBD><E1B9B3>
bool CAttemperEngine::SetAttemperEngineSink(IUnknownEx * pIUnknownEx)
{
//Ч<><D0A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ASSERT(pIUnknownEx != NULL);
ASSERT(m_pIAttemperEngineSink == NULL);
if (pIUnknownEx == NULL) return false;
if (m_pIAttemperEngineSink != NULL) return false;
//<2F><>ѯ<EFBFBD>ӿ<EFBFBD>
m_pIAttemperEngineSink = QUERY_OBJECT_PTR_INTERFACE(pIUnknownEx, IAttemperEngineSink);
if (m_pIAttemperEngineSink == NULL)
{
CTraceService::TraceString(TEXT("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӿڻ<EFBFBD>ȡʧ<EFBFBD>ܣ<EFBFBD><EFBFBD>ҽӲ<EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD><EFBFBD>"), TraceLevel_Exception);
return false;
}
return true;
}
//<2F><>ȡ<EFBFBD>ӿ<EFBFBD>
void * CAttemperEngine::GetQueueService(const IID & Guid, DWORD dwQueryVer)
{
return m_QueueService.QueryInterface(Guid, dwQueryVer);
}
//<2F><><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD>
//////////////////////////////////////////////////////////////////////////
//<2F>Զ<EFBFBD><D4B6>¼<EFBFBD>
bool CAttemperEngine::OnEventCustom(WORD wRequestID, VOID * pData, WORD wDataSize)
{
ASSERT(m_pIAttemperEngineSink);
if (m_pIAttemperEngineSink == NULL) return false;
return m_pIAttemperEngineSink->OnEventAttemperData(wRequestID, pData, wDataSize);
}
//<2F><><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD>
bool CAttemperEngine::OnEventControl(WORD wControlID, VOID * pData, WORD wDataSize)
{
ASSERT(m_pIAttemperEngineSink);
if (m_pIAttemperEngineSink == NULL) return false;
return m_pIAttemperEngineSink->OnEventControl(wControlID, pData, wDataSize);
}
//<2F><><EFBFBD>нӿ<D0BD>
void CAttemperEngine::OnQueueServiceSink(WORD wIdentifier, void * pBuffer, WORD wDataSize)
{
//<2F>ں<EFBFBD><DABA>¼<EFBFBD>
VERIFY_RETURN_VOID(m_pIAttemperEngineSink != NULL);
switch (wIdentifier)
{
case EVENT_TIMER: //<2F><>ʱ<EFBFBD><CAB1><EFBFBD>¼<EFBFBD>
{
//Ч<><D0A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ASSERT(wDataSize == sizeof(NTY_TimerEvent));
if (wDataSize != sizeof(NTY_TimerEvent)) return;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
NTY_TimerEvent * pTimerEvent = (NTY_TimerEvent *)pBuffer;
try
{
m_pIAttemperEngineSink->OnEventTimer(pTimerEvent->dwTimerID, pTimerEvent->dwBindParameter);
}
catch (...)
{
CTraceService::TraceFormat(TraceLevel_Exception,TEXT("<EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>쳣, TimerID:%u, Param:%ld"), pTimerEvent->dwTimerID, pTimerEvent->dwBindParameter);
}
return;
}
case EVENT_DATABASE: //<2F><><EFBFBD>ݿ<EFBFBD><DDBF>¼<EFBFBD>
{
//Ч<><D0A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ASSERT(wDataSize >= sizeof(NTY_DataBaseEvent));
if (wDataSize < sizeof(NTY_DataBaseEvent)) return;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
NTY_DataBaseEvent * pDataBaseEvent = (NTY_DataBaseEvent *)pBuffer;
try
{
m_pIAttemperEngineSink->OnEventDataBase(pDataBaseEvent->wRequestID, pDataBaseEvent->dwContextID, pDataBaseEvent + 1, wDataSize - sizeof(NTY_DataBaseEvent));
}
catch (...)
{
CTraceService::TraceFormat(TraceLevel_Exception,TEXT("<EFBFBD><EFBFBD><EFBFBD>ݿ⴦<EFBFBD><EFBFBD><EFBFBD>쳣, RequestID:%u"), pDataBaseEvent->wRequestID);
}
return;
}
case EVENT_TCP_NETWORK_ACCEPT: //<2F><><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD>¼<EFBFBD>
{
//Ч<><D0A7><EFBFBD><EFBFBD>С
ASSERT(wDataSize == sizeof(NTY_TCPNetworkAcceptEvent));
if (wDataSize != sizeof(NTY_TCPNetworkAcceptEvent)) return;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
NTY_TCPNetworkAcceptEvent * pSocketAcceptEvent = (NTY_TCPNetworkAcceptEvent *)pBuffer;
bool bSuccess = false;
try
{
bSuccess = m_pIAttemperEngineSink->OnEventTCPNetworkBind(pSocketAcceptEvent->dwClientAddr, pSocketAcceptEvent->dwSocketID);
}
catch (...)
{
CTraceService::TraceFormat(TraceLevel_Exception,TEXT("OnEventTCPNetworkBind<EFBFBD>쳣:dwClientIP=%u, dwSocketID=%u"), pSocketAcceptEvent->dwClientAddr, pSocketAcceptEvent->dwSocketID);
}
if ( !bSuccess )
{
m_pTCPNetworkEngine->CloseSocket(pSocketAcceptEvent->dwSocketID);
}
return;
}
case EVENT_TCP_NETWORK_READ: //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD>¼<EFBFBD>
{
//Ч<><D0A7><EFBFBD><EFBFBD>С
NTY_TCPNetworkReadEvent * pSocketReadEvent = (NTY_TCPNetworkReadEvent *)pBuffer;
ASSERT(wDataSize >= sizeof(NTY_TCPNetworkReadEvent));
ASSERT(wDataSize == (sizeof(NTY_TCPNetworkReadEvent) + pSocketReadEvent->wDataSize));
if (wDataSize < sizeof(NTY_TCPNetworkReadEvent)) return;
if (wDataSize != (sizeof(NTY_TCPNetworkReadEvent) + pSocketReadEvent->wDataSize)) return;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
bool bSuccess = false;
try
{
bSuccess = m_pIAttemperEngineSink->OnEventTCPNetworkRead(pSocketReadEvent->Command, pSocketReadEvent + 1, pSocketReadEvent->wDataSize, pSocketReadEvent->dwSocketID);
if ( !bSuccess )
{
ASSERT(FALSE);
CTraceService::TraceFormat(TraceLevel_Exception,TEXT("<EFBFBD><EFBFBD>Ϣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD><EFBFBD>, MainID:%u, SubID:%u"), pSocketReadEvent->Command.wMainCmdID, pSocketReadEvent->Command.wSubCmdID);
m_pTCPNetworkEngine->CloseSocket(pSocketReadEvent->dwSocketID);
}
}
catch (...)
{
CTraceService::TraceFormat(TraceLevel_Exception,TEXT("<EFBFBD><EFBFBD>Ϣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>쳣, MainID:%u, SubID:%u"), pSocketReadEvent->Command.wMainCmdID, pSocketReadEvent->Command.wSubCmdID);
m_pTCPNetworkEngine->CloseSocket(pSocketReadEvent->dwSocketID);
}
return;
}
case EVENT_TCP_NETWORK_SHUT: //<2F>رն<D8B1>ȡ<EFBFBD>¼<EFBFBD>
{
//Ч<><D0A7><EFBFBD><EFBFBD>С
ASSERT(wDataSize == sizeof(NTY_TCPNetworkShutEvent));
if (wDataSize != sizeof(NTY_TCPNetworkShutEvent)) return;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
NTY_TCPNetworkShutEvent * pNetworkShutEvent = (NTY_TCPNetworkShutEvent *)pBuffer;
bool bSuccess = false;
try
{
bSuccess = m_pIAttemperEngineSink->OnEventTCPNetworkShut(pNetworkShutEvent->dwClientAddr, pNetworkShutEvent->dwActiveTime, pNetworkShutEvent->dwSocketID);
}
catch (...)
{
CTraceService::TraceFormat(TraceLevel_Exception, TEXT("OnEventTCPNetworkShut<EFBFBD>쳣:dwClientIP=%u, dwActiveTime=%u,dwSocketID=%u"), pNetworkShutEvent->dwClientAddr, pNetworkShutEvent->dwActiveTime, pNetworkShutEvent->dwSocketID);
}
if ( !bSuccess )
{
m_pTCPNetworkEngine->CloseSocket(pNetworkShutEvent->dwSocketID);
}
return;
}
case EVENT_TCP_SOCKET_READ: //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD>¼<EFBFBD>
{
//Ч<><D0A7><EFBFBD><EFBFBD>С
NTY_TCPSocketReadEvent * pSocketReadEvent = (NTY_TCPSocketReadEvent *)pBuffer;
ASSERT(wDataSize >= sizeof(NTY_TCPSocketReadEvent));
ASSERT(wDataSize == (sizeof(NTY_TCPSocketReadEvent) + pSocketReadEvent->wDataSize));
if (wDataSize < sizeof(NTY_TCPSocketReadEvent)) return;
if (wDataSize != (sizeof(NTY_TCPSocketReadEvent) + pSocketReadEvent->wDataSize)) return;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
try
{
if (!m_pIAttemperEngineSink->OnEventTCPSocketRead(pSocketReadEvent->wServiceID, pSocketReadEvent->Command, pSocketReadEvent + 1, pSocketReadEvent->wDataSize))
{
CTraceService::TraceFormat(TraceLevel_Exception,TEXT("<EFBFBD><EFBFBD>Ϣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD><EFBFBD>, MainID:%d, SubID:%d"), pSocketReadEvent->Command.wMainCmdID, pSocketReadEvent->Command.wSubCmdID);
m_pITCPSocketService->CloseSocket();
}
}
catch (...)
{
CTraceService::TraceFormat(TraceLevel_Exception,TEXT("<EFBFBD><EFBFBD>Ϣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>쳣, MainID:%d, SubID:%d"), pSocketReadEvent->Command.wMainCmdID, pSocketReadEvent->Command.wSubCmdID);
m_pITCPSocketService->CloseSocket();
}
return;
}
case EVENT_TCP_SOCKET_SHUT: //<2F><><EFBFBD><EFBFBD><EFBFBD>ر<EFBFBD><D8B1>¼<EFBFBD>
{
//Ч<><D0A7><EFBFBD><EFBFBD>С
ASSERT(wDataSize == sizeof(NTY_TCPSocketShutEvent));
if (wDataSize != sizeof(NTY_TCPSocketShutEvent)) return;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
NTY_TCPSocketShutEvent * pSocketShutEvent = (NTY_TCPSocketShutEvent *)pBuffer;
bool bSuccess = false;
try
{
bSuccess = m_pIAttemperEngineSink->OnEventTCPSocketShut(pSocketShutEvent->wServiceID, pSocketShutEvent->cbShutReason);
}
catch (...)
{
CTraceService::TraceFormat(TraceLevel_Exception, TEXT("OnEventTCPSocketShut<EFBFBD>쳣:wServiceID=%u, cbShutReason=%u"), pSocketShutEvent->wServiceID, pSocketShutEvent->cbShutReason);
}
if (!bSuccess)
{
m_pITCPSocketService->CloseSocket();
}
return;
}
case EVENT_TCP_SOCKET_LINK:
{
//Ч<><D0A7><EFBFBD><EFBFBD>С
ASSERT(wDataSize == sizeof(NTY_TCPSocketLinkEvent));
if (wDataSize != sizeof(NTY_TCPSocketLinkEvent)) return;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
NTY_TCPSocketLinkEvent * pSocketLinkEvent = (NTY_TCPSocketLinkEvent *)pBuffer;
bool bSuccess = false;
try
{
bSuccess = m_pIAttemperEngineSink->OnEventTCPSocketLink(pSocketLinkEvent->wServiceID, pSocketLinkEvent->nErrorCode);
}
catch (...)
{
CTraceService::TraceFormat(TraceLevel_Exception, _T("OnEventTCPSocketLink<EFBFBD>쳣!wServiceID=%u,nErrorCode=%u"), pSocketLinkEvent->wServiceID, pSocketLinkEvent->nErrorCode);
}
if (!bSuccess)
{
m_pITCPSocketService->CloseSocket();
}
return;
}
case EVENT_CONTROL:
{
//Ч<><D0A7><EFBFBD><EFBFBD>С
ASSERT(wDataSize == sizeof(NTY_ControlEvent));
if (wDataSize != sizeof(NTY_ControlEvent)) return;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
//NTY_ControlEvent * pControlEvent = (NTY_ControlEvent *)pBuffer;
try
{
m_pIAttemperEngineSink->OnEventControl(wIdentifier, pBuffer, wDataSize);
}
catch (...)
{
ASSERT(0);
CTraceService::TraceFormat(TraceLevel_Exception,_T("OnEventControl<EFBFBD>쳣!wIdentifier=%u,wDataSize=%u"),wIdentifier,wDataSize);
}
return;
}
}
//<2F><><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD>
try
{
m_pIAttemperEngineSink->OnEventAttemperData(wIdentifier, pBuffer, wDataSize);
}
catch (...)
{
ASSERT(0);
CTraceService::TraceFormat(TraceLevel_Exception,_T("OnEventAttemperData<EFBFBD>쳣!wIdentifier=%u,wDataSize=%u"),wIdentifier,wDataSize);
}
return;
}
bool CAttemperEngine::OnEventDataBaseResult(WORD wRequestID, DWORD dwContextID, VOID * pData, WORD wDataSize)
{
try
{
if (m_pIAttemperEngineSink->OnEventDataBase(wRequestID, dwContextID, pData, wDataSize))
{
return true;
}
ASSERT(0);
CTraceService::TraceFormat(TraceLevel_Exception,_T("OnEventDataBaseResultʧ<EFBFBD><EFBFBD>!wRequestID=%u,dwContextID=%u,wDataSize=%u"),wRequestID,dwContextID,wDataSize);
}
catch (...)
{
ASSERT(0);
CTraceService::TraceFormat(TraceLevel_Exception,_T("OnEventDataBaseResult<EFBFBD>쳣!wRequestID=%u,dwContextID=%u,wDataSize=%u"),wRequestID,dwContextID,wDataSize);
}
return false;
}
//<2F><><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD>ӿ<EFBFBD>
//////////////////////////////////////////////////////////////////////////
//Ӧ<><D3A6><EFBFBD>¼<EFBFBD>
bool CAttemperEngine::OnEventTCPNetworkBind(DWORD dwSocketID, DWORD dwClientAddr)
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CWHDataLocker lock(m_CriticalSection);
try
{
if (m_pIAttemperEngineSink->OnEventTCPNetworkBind(dwClientAddr, dwSocketID))
{
return true;
}
CTraceService::TraceFormat(TraceLevel_Exception,_T("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><EFBFBD><EFBFBD>󶨴<EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD><EFBFBD>!dwSocketID=%u,dwClientIP=%u"),dwSocketID,dwClientAddr);
}
catch (...)
{
CTraceService::TraceFormat(TraceLevel_Exception,_T("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><EFBFBD><EFBFBD>󶨴<EFBFBD><EFBFBD><EFBFBD><EFBFBD>쳣!dwSocketID=%u,dwClientIP=%u"),dwSocketID,dwClientAddr);
}
ASSERT(0);
return false;
}
//<2F>ر<EFBFBD><D8B1>¼<EFBFBD>
bool CAttemperEngine::OnEventTCPNetworkShut(DWORD dwSocketID, DWORD dwClientAddr, DWORD dwActiveTime)
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CWHDataLocker lock(m_CriticalSection);
try
{
if (m_pIAttemperEngineSink->OnEventTCPNetworkShut(dwClientAddr, dwActiveTime, dwSocketID))
{
return true;
}
CTraceService::TraceFormat(TraceLevel_Exception,_T("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><EFBFBD><EFBFBD>رմ<EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD><EFBFBD>!dwClientIP=%u,dwActiveTime=%u,dwSocketID=%u"),dwClientAddr,dwActiveTime,dwSocketID);
}
catch (...)
{
CTraceService::TraceFormat(TraceLevel_Exception,_T("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><EFBFBD><EFBFBD>رմ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>쳣!dwClientIP=%u,dwActiveTime=%u,dwSocketID=%u"),dwClientAddr,dwActiveTime,dwSocketID);
}
ASSERT(0);
return false;
}
//<2F><>ȡ<EFBFBD>¼<EFBFBD>
bool CAttemperEngine::OnEventTCPNetworkRead(DWORD dwSocketID, TCP_Command Command, VOID * pData, WORD wDataSize)
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CWHDataLocker lock(m_CriticalSection);
try
{
if (m_pIAttemperEngineSink->OnEventTCPNetworkRead(Command, pData, wDataSize, dwSocketID))
{
return true;
}
CTraceService::TraceFormat(TraceLevel_Exception,_T("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD><EFBFBD>!MainID=%u,SubID=%u,DataSize=%u"),Command.wMainCmdID,Command.wSubCmdID,wDataSize);
}
catch (...)
{
CTraceService::TraceFormat(TraceLevel_Exception,_T("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>쳣!MainID=%u,SubID=%u,DataSize=%u"),Command.wMainCmdID,Command.wSubCmdID,wDataSize);
}
ASSERT(0);
return false;
}
bool CAttemperEngine::GetBurthenInfo( tagBurthenInfo & BurthenInfo )
{
return m_QueueService.GetBurthenInfo(BurthenInfo);
}
//////////////////////////////////////////////////////////////////////////
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//
extern "C" __declspec(dllexport) void * CreateAttemperEngine(const GUID & Guid, DWORD dwInterfaceVer)
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CAttemperEngine * pAttemperEngine = NULL;
try
{
pAttemperEngine = new CAttemperEngine();
if (pAttemperEngine == NULL) throw TEXT("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD><EFBFBD>");
void * pObject = pAttemperEngine->QueryInterface(Guid, dwInterfaceVer);
if (pObject == NULL) throw TEXT("<EFBFBD>ӿڲ<EFBFBD>ѯʧ<EFBFBD><EFBFBD>");
return pObject;
}
catch (...) {}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SafeDelete(pAttemperEngine);
return NULL;
}
//////////////////////////////////////////////////////////////////////////