|
@@ -1,5 +1,5 @@
|
|
|
#include "StdAfx.h"
|
|
|
-#include "IOCPModel.h"
|
|
|
+#include "SATTCPServer.h"
|
|
|
|
|
|
|
|
|
|
|
@@ -21,7 +21,7 @@
|
|
|
|
|
|
|
|
|
|
|
|
-CIOCPModel::CIOCPModel(void):
|
|
|
+CSATTCPServer::CSATTCPServer(void):
|
|
|
m_nThreads(0),
|
|
|
m_hShutdownEvent(NULL),
|
|
|
m_hIOCompletionPort(NULL),
|
|
@@ -35,7 +35,7 @@ CIOCPModel::CIOCPModel(void):
|
|
|
}
|
|
|
|
|
|
|
|
|
-CIOCPModel::~CIOCPModel(void)
|
|
|
+CSATTCPServer::~CSATTCPServer(void)
|
|
|
{
|
|
|
|
|
|
this->Stop();
|
|
@@ -49,10 +49,10 @@ CIOCPModel::~CIOCPModel(void)
|
|
|
|
|
|
|
|
|
|
|
|
-DWORD WINAPI CIOCPModel::_WorkerThread(LPVOID lpParam)
|
|
|
+DWORD WINAPI CSATTCPServer::_WorkerThread(LPVOID lpParam)
|
|
|
{
|
|
|
THREADPARAMS_WORKER* pParam = (THREADPARAMS_WORKER*)lpParam;
|
|
|
- CIOCPModel* pIOCPModel = (CIOCPModel*)pParam->pIOCPModel;
|
|
|
+ CSATTCPServer* pIOCPModel = (CSATTCPServer*)pParam->pIOCPModel;
|
|
|
int nThreadNo = (int)pParam->nThreadNo;
|
|
|
|
|
|
pIOCPModel->_ShowMessage(_T("工作者线程启动,ID: %d."),nThreadNo);
|
|
@@ -165,7 +165,7 @@ DWORD WINAPI CIOCPModel::_WorkerThread(LPVOID lpParam)
|
|
|
|
|
|
|
|
|
|
|
|
-bool CIOCPModel::LoadSocketLib()
|
|
|
+bool CSATTCPServer::LoadSocketLib()
|
|
|
{
|
|
|
WSADATA wsaData;
|
|
|
int nResult;
|
|
@@ -182,7 +182,7 @@ bool CIOCPModel::LoadSocketLib()
|
|
|
|
|
|
|
|
|
|
|
|
-bool CIOCPModel::Start(unsigned int port)
|
|
|
+bool CSATTCPServer::Start(unsigned int port)
|
|
|
{
|
|
|
|
|
|
InitializeCriticalSection(&m_csContextList);
|
|
@@ -221,7 +221,7 @@ bool CIOCPModel::Start(unsigned int port)
|
|
|
|
|
|
|
|
|
|
|
|
-void CIOCPModel::Stop()
|
|
|
+void CSATTCPServer::Stop()
|
|
|
{
|
|
|
if( m_pListenContext!=NULL && m_pListenContext->m_Socket!=INVALID_SOCKET )
|
|
|
{
|
|
@@ -250,7 +250,7 @@ void CIOCPModel::Stop()
|
|
|
|
|
|
|
|
|
|
|
|
-bool CIOCPModel::_InitializeIOCP()
|
|
|
+bool CSATTCPServer::_InitializeIOCP()
|
|
|
{
|
|
|
|
|
|
m_hIOCompletionPort = CreateIoCompletionPort(INVALID_HANDLE_VALUE, NULL, 0, 0 );
|
|
@@ -285,7 +285,7 @@ bool CIOCPModel::_InitializeIOCP()
|
|
|
|
|
|
|
|
|
|
|
|
-bool CIOCPModel::_InitializeListenSocket(unsigned int port)
|
|
|
+bool CSATTCPServer::_InitializeListenSocket(unsigned int port)
|
|
|
{
|
|
|
|
|
|
GUID GuidAcceptEx = WSAID_ACCEPTEX;
|
|
@@ -409,7 +409,7 @@ bool CIOCPModel::_InitializeListenSocket(unsigned int port)
|
|
|
|
|
|
|
|
|
|
|
|
-void CIOCPModel::_DeInitialize()
|
|
|
+void CSATTCPServer::_DeInitialize()
|
|
|
{
|
|
|
|
|
|
DeleteCriticalSection(&m_csContextList);
|
|
@@ -444,7 +444,7 @@ void CIOCPModel::_DeInitialize()
|
|
|
|
|
|
|
|
|
|
|
|
-bool CIOCPModel::_PostAccept( PER_IO_CONTEXT* pAcceptIoContext )
|
|
|
+bool CSATTCPServer::_PostAccept( PER_IO_CONTEXT* pAcceptIoContext )
|
|
|
{
|
|
|
ASSERT( INVALID_SOCKET!=m_pListenContext->m_Socket );
|
|
|
|
|
@@ -484,7 +484,7 @@ bool CIOCPModel::_PostAccept( PER_IO_CONTEXT* pAcceptIoContext )
|
|
|
|
|
|
|
|
|
|
|
|
-bool CIOCPModel::_DoAccpet( PER_SOCKET_CONTEXT* pSocketContext, PER_IO_CONTEXT* pIoContext )
|
|
|
+bool CSATTCPServer::_DoAccpet( PER_SOCKET_CONTEXT* pSocketContext, PER_IO_CONTEXT* pIoContext )
|
|
|
{
|
|
|
SOCKADDR_IN* ClientAddr = NULL;
|
|
|
SOCKADDR_IN* LocalAddr = NULL;
|
|
@@ -564,7 +564,7 @@ bool CIOCPModel::_DoAccpet( PER_SOCKET_CONTEXT* pSocketContext, PER_IO_CONTEXT*
|
|
|
|
|
|
|
|
|
|
|
|
-bool CIOCPModel::_PostRecv( PER_IO_CONTEXT* pIoContext )
|
|
|
+bool CSATTCPServer::_PostRecv( PER_IO_CONTEXT* pIoContext )
|
|
|
{
|
|
|
|
|
|
DWORD dwFlags = 0;
|
|
@@ -589,7 +589,7 @@ bool CIOCPModel::_PostRecv( PER_IO_CONTEXT* pIoContext )
|
|
|
|
|
|
|
|
|
|
|
|
-bool CIOCPModel::_DoRecv( PER_SOCKET_CONTEXT* pSocketContext, PER_IO_CONTEXT* pIoContext )
|
|
|
+bool CSATTCPServer::_DoRecv( PER_SOCKET_CONTEXT* pSocketContext, PER_IO_CONTEXT* pIoContext )
|
|
|
{
|
|
|
|
|
|
SOCKADDR_IN* ClientAddr = &pSocketContext->m_ClientAddr;
|
|
@@ -625,7 +625,7 @@ bool CIOCPModel::_DoRecv( PER_SOCKET_CONTEXT* pSocketContext, PER_IO_CONTEXT* pI
|
|
|
|
|
|
|
|
|
|
|
|
-bool CIOCPModel::_AssociateWithIOCP( PER_SOCKET_CONTEXT *pContext )
|
|
|
+bool CSATTCPServer::_AssociateWithIOCP( PER_SOCKET_CONTEXT *pContext )
|
|
|
{
|
|
|
|
|
|
HANDLE hTemp = CreateIoCompletionPort((HANDLE)pContext->m_Socket, m_hIOCompletionPort, (DWORD)pContext, 0);
|
|
@@ -651,7 +651,7 @@ bool CIOCPModel::_AssociateWithIOCP( PER_SOCKET_CONTEXT *pContext )
|
|
|
|
|
|
|
|
|
|
|
|
-void CIOCPModel::_AddToContextList( PER_SOCKET_CONTEXT *pHandleData )
|
|
|
+void CSATTCPServer::_AddToContextList( PER_SOCKET_CONTEXT *pHandleData )
|
|
|
{
|
|
|
EnterCriticalSection(&m_csContextList);
|
|
|
|
|
@@ -662,7 +662,7 @@ void CIOCPModel::_AddToContextList( PER_SOCKET_CONTEXT *pHandleData )
|
|
|
|
|
|
|
|
|
|
|
|
-void CIOCPModel::_RemoveContext( PER_SOCKET_CONTEXT *pSocketContext )
|
|
|
+void CSATTCPServer::_RemoveContext( PER_SOCKET_CONTEXT *pSocketContext )
|
|
|
{
|
|
|
EnterCriticalSection(&m_csContextList);
|
|
|
|
|
@@ -681,7 +681,7 @@ void CIOCPModel::_RemoveContext( PER_SOCKET_CONTEXT *pSocketContext )
|
|
|
|
|
|
|
|
|
|
|
|
-void CIOCPModel::_ClearContextList()
|
|
|
+void CSATTCPServer::_ClearContextList()
|
|
|
{
|
|
|
EnterCriticalSection(&m_csContextList);
|
|
|
|
|
@@ -707,7 +707,7 @@ void CIOCPModel::_ClearContextList()
|
|
|
|
|
|
|
|
|
|
|
|
-CString CIOCPModel::GetLocalIP()
|
|
|
+CString CSATTCPServer::GetLocalIP()
|
|
|
{
|
|
|
|
|
|
char hostname[MAX_PATH] = {0};
|
|
@@ -731,7 +731,7 @@ CString CIOCPModel::GetLocalIP()
|
|
|
|
|
|
|
|
|
|
|
|
-int CIOCPModel::_GetNoOfProcessors()
|
|
|
+int CSATTCPServer::_GetNoOfProcessors()
|
|
|
{
|
|
|
SYSTEM_INFO si;
|
|
|
|
|
@@ -742,7 +742,7 @@ int CIOCPModel::_GetNoOfProcessors()
|
|
|
|
|
|
|
|
|
|
|
|
-void CIOCPModel::_ShowMessage(const CString szFormat,...) const
|
|
|
+void CSATTCPServer::_ShowMessage(const CString szFormat,...) const
|
|
|
{
|
|
|
|
|
|
CString strMessage;
|
|
@@ -766,11 +766,11 @@ void CIOCPModel::_ShowMessage(const CString szFormat,...) const
|
|
|
#endif
|
|
|
}
|
|
|
|
|
|
-#define PAK_LEN sizeof(ProHeader)
|
|
|
-void CIOCPModel::_RecvProcess(PER_SOCKET_CONTEXT* pSocketContext, PER_IO_CONTEXT* pIoContext)
|
|
|
+#define PAK_LEN sizeof(DataHeader)
|
|
|
+void CSATTCPServer::_RecvProcess(PER_SOCKET_CONTEXT* pSocketContext, PER_IO_CONTEXT* pIoContext)
|
|
|
{
|
|
|
|
|
|
- ProHeader* phead = NULL;
|
|
|
+ DataHeader* phead = NULL;
|
|
|
if (pSocketContext->lastData.size() == 0)
|
|
|
{
|
|
|
|
|
@@ -781,13 +781,14 @@ void CIOCPModel::_RecvProcess(PER_SOCKET_CONTEXT* pSocketContext, PER_IO_CONTEXT
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
- phead = (ProHeader*)pIoContext->m_wsaBuf.buf;
|
|
|
+
|
|
|
+ phead = (DataHeader*)pIoContext->m_wsaBuf.buf;
|
|
|
|
|
|
|
|
|
if (phead->len == pIoContext->m_Overlapped.InternalHigh)
|
|
|
{
|
|
|
OutputDebugString("A:完整的包;\n");
|
|
|
- _DeviceProc(pIoContext, (Package*)pIoContext->m_wsaBuf.buf);
|
|
|
+ _TaskProcess(pIoContext, (Package*)pIoContext->m_wsaBuf.buf);
|
|
|
}
|
|
|
|
|
|
else if (phead->len > pIoContext->m_Overlapped.InternalHigh)
|
|
@@ -800,7 +801,7 @@ void CIOCPModel::_RecvProcess(PER_SOCKET_CONTEXT* pSocketContext, PER_IO_CONTEXT
|
|
|
{
|
|
|
OutputDebugString("A:超包;\n");
|
|
|
pSocketContext->lastData.append(pIoContext->m_wsaBuf.buf + phead->len, pIoContext->m_Overlapped.InternalHigh - phead->len);
|
|
|
- _DeviceProc(pIoContext, (Package*)pIoContext->m_wsaBuf.buf);
|
|
|
+ _TaskProcess(pIoContext, (Package*)pIoContext->m_wsaBuf.buf);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
@@ -809,14 +810,14 @@ void CIOCPModel::_RecvProcess(PER_SOCKET_CONTEXT* pSocketContext, PER_IO_CONTEXT
|
|
|
int lastlen = pIoContext->m_Overlapped.InternalHigh;
|
|
|
if (pSocketContext->lastData.size() >= PAK_LEN)
|
|
|
{
|
|
|
- phead = (ProHeader*)pSocketContext->lastData.data();
|
|
|
+ phead = (DataHeader*)pSocketContext->lastData.data();
|
|
|
if (phead->len <= pSocketContext->lastData.size() + pIoContext->m_Overlapped.InternalHigh)
|
|
|
{
|
|
|
if ( phead->len <= pSocketContext->lastData.size() )
|
|
|
{
|
|
|
OutputDebugString("C:超包;\n");
|
|
|
|
|
|
- _DeviceProc(pIoContext, (Package*)pSocketContext->lastData.substr(0, phead->len).data());
|
|
|
+ _TaskProcess(pIoContext, (Package*)pSocketContext->lastData.substr(0, phead->len).data());
|
|
|
|
|
|
pSocketContext->lastData = pSocketContext->lastData.substr(phead->len);
|
|
|
pSocketContext->lastData.append(pIoContext->m_wsaBuf.buf, pIoContext->m_Overlapped.InternalHigh);
|
|
@@ -827,7 +828,7 @@ void CIOCPModel::_RecvProcess(PER_SOCKET_CONTEXT* pSocketContext, PER_IO_CONTEXT
|
|
|
lastlen = pSocketContext->lastData.size() + pIoContext->m_Overlapped.InternalHigh - phead->len;
|
|
|
pSocketContext->lastData.append(pIoContext->m_wsaBuf.buf, pIoContext->m_Overlapped.InternalHigh - lastlen);
|
|
|
|
|
|
- _DeviceProc(pIoContext, (Package*)pSocketContext->lastData.data());
|
|
|
+ _TaskProcess(pIoContext, (Package*)pSocketContext->lastData.data());
|
|
|
|
|
|
pSocketContext->lastData.clear();
|
|
|
if (lastlen)
|
|
@@ -854,14 +855,14 @@ void CIOCPModel::_RecvProcess(PER_SOCKET_CONTEXT* pSocketContext, PER_IO_CONTEXT
|
|
|
{
|
|
|
|
|
|
pSocketContext->lastData.append(pIoContext->m_wsaBuf.buf, diflen);
|
|
|
- phead = (ProHeader*)pSocketContext->lastData.data();
|
|
|
+ phead = (DataHeader*)pSocketContext->lastData.data();
|
|
|
|
|
|
|
|
|
if ( phead->len == PAK_LEN + pIoContext->m_Overlapped.InternalHigh - diflen )
|
|
|
{
|
|
|
OutputDebugString("B:完整包;\n");
|
|
|
pSocketContext->lastData.append(pIoContext->m_wsaBuf.buf + diflen, pIoContext->m_Overlapped.InternalHigh - diflen);
|
|
|
- _DeviceProc(pIoContext, (Package*)pSocketContext->lastData.data());
|
|
|
+ _TaskProcess(pIoContext, (Package*)pSocketContext->lastData.data());
|
|
|
pSocketContext->lastData.clear();
|
|
|
}
|
|
|
|
|
@@ -876,7 +877,7 @@ void CIOCPModel::_RecvProcess(PER_SOCKET_CONTEXT* pSocketContext, PER_IO_CONTEXT
|
|
|
OutputDebugString("B:超包;\n");
|
|
|
|
|
|
pSocketContext->lastData.append(pIoContext->m_wsaBuf.buf + diflen, phead->len - PAK_LEN);
|
|
|
- _DeviceProc(pIoContext, (Package*)pSocketContext->lastData.data());
|
|
|
+ _TaskProcess(pIoContext, (Package*)pSocketContext->lastData.data());
|
|
|
pSocketContext->lastData.clear();
|
|
|
int last = pIoContext->m_Overlapped.InternalHigh - diflen - phead->len + PAK_LEN;
|
|
|
if (last)
|
|
@@ -889,20 +890,15 @@ void CIOCPModel::_RecvProcess(PER_SOCKET_CONTEXT* pSocketContext, PER_IO_CONTEXT
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-void CIOCPModel::_DeviceProc(PER_IO_CONTEXT* pIoContext, Package* pak)
|
|
|
+void CSATTCPServer::_TaskProcess(PER_IO_CONTEXT* pIoContext, Package* pak)
|
|
|
{
|
|
|
- if ( pak->header.version != 0xAA )
|
|
|
- {
|
|
|
- return;
|
|
|
- }
|
|
|
-
|
|
|
cJSON* pJson = cJSON_Parse((const char*)&pak->buf);
|
|
|
if ( pJson == NULL )
|
|
|
{
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
- RequesJson reqj;
|
|
|
+ RequestJson reqj;
|
|
|
reqj.device_id = cJSON_GetObjectItem(pJson, "device_id") ? cJSON_GetObjectItem(pJson, "device_id")->valueint : 0;
|
|
|
reqj.device_name = cJSON_GetObjectItem(pJson, "device_name") ? cJSON_GetObjectItem(pJson, "device_name")->valuestring : "";
|
|
|
reqj.device_cmd = cJSON_GetObjectItem(pJson, "device_cmd") ? cJSON_GetObjectItem(pJson, "device_cmd")->valuestring : "";
|
|
@@ -913,7 +909,6 @@ void CIOCPModel::_DeviceProc(PER_IO_CONTEXT* pIoContext, Package* pak)
|
|
|
cJSON_Delete(pJson);
|
|
|
pJson = NULL;
|
|
|
}
|
|
|
-
|
|
|
}
|
|
|
|
|
|
|
|
@@ -921,7 +916,7 @@ void CIOCPModel::_DeviceProc(PER_IO_CONTEXT* pIoContext, Package* pak)
|
|
|
|
|
|
|
|
|
|
|
|
-bool CIOCPModel::_IsSocketAlive(SOCKET s)
|
|
|
+bool CSATTCPServer::_IsSocketAlive(SOCKET s)
|
|
|
{
|
|
|
int nByteSent=send(s,"",0,0);
|
|
|
if (-1 == nByteSent) return false;
|
|
@@ -930,7 +925,7 @@ bool CIOCPModel::_IsSocketAlive(SOCKET s)
|
|
|
|
|
|
|
|
|
|
|
|
-bool CIOCPModel::HandleError( PER_SOCKET_CONTEXT *pContext,const DWORD& dwErr )
|
|
|
+bool CSATTCPServer::HandleError( PER_SOCKET_CONTEXT *pContext,const DWORD& dwErr )
|
|
|
{
|
|
|
|
|
|
if(WAIT_TIMEOUT == dwErr)
|