|
@@ -1,6 +1,7 @@
|
|
#include "StdAfx.h"
|
|
#include "StdAfx.h"
|
|
#include "IOCPModel.h"
|
|
#include "IOCPModel.h"
|
|
//#include "MainDlg.h"
|
|
//#include "MainDlg.h"
|
|
|
|
+#include "MemoryDef.h"
|
|
|
|
|
|
// 每一个处理器上产生多少个线程(为了最大限度的提升服务器性能,详见配套文档)
|
|
// 每一个处理器上产生多少个线程(为了最大限度的提升服务器性能,详见配套文档)
|
|
#define WORKER_THREADS_PER_PROCESSOR 2
|
|
#define WORKER_THREADS_PER_PROCESSOR 2
|
|
@@ -762,7 +763,7 @@ void CIOCPModel::_ShowMessage(const CString szFormat,...) const
|
|
TRACE( strMessage+_T("\n") );
|
|
TRACE( strMessage+_T("\n") );
|
|
}
|
|
}
|
|
#else
|
|
#else
|
|
- Global::WriteTextLog(strMessage);
|
|
|
|
|
|
+ //Global::WriteTextLog(strMessage);
|
|
#endif
|
|
#endif
|
|
}
|
|
}
|
|
|
|
|
|
@@ -787,7 +788,7 @@ void CIOCPModel::_RecvProcess(PER_SOCKET_CONTEXT* pSocketContext, PER_IO_CONTEXT
|
|
if (phead->len == pIoContext->m_Overlapped.InternalHigh)
|
|
if (phead->len == pIoContext->m_Overlapped.InternalHigh)
|
|
{
|
|
{
|
|
OutputDebugString("A:完整的包;\n");
|
|
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)
|
|
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");
|
|
OutputDebugString("A:超包;\n");
|
|
pSocketContext->lastData.append(pIoContext->m_wsaBuf.buf + phead->len, pIoContext->m_Overlapped.InternalHigh - phead->len);
|
|
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);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
@@ -816,7 +817,7 @@ void CIOCPModel::_RecvProcess(PER_SOCKET_CONTEXT* pSocketContext, PER_IO_CONTEXT
|
|
{
|
|
{
|
|
OutputDebugString("C:超包;\n");
|
|
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 = pSocketContext->lastData.substr(phead->len);
|
|
pSocketContext->lastData.append(pIoContext->m_wsaBuf.buf, pIoContext->m_Overlapped.InternalHigh);
|
|
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;
|
|
lastlen = pSocketContext->lastData.size() + pIoContext->m_Overlapped.InternalHigh - phead->len;
|
|
pSocketContext->lastData.append(pIoContext->m_wsaBuf.buf, pIoContext->m_Overlapped.InternalHigh - lastlen);
|
|
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();
|
|
pSocketContext->lastData.clear();
|
|
if (lastlen)
|
|
if (lastlen)
|
|
@@ -861,7 +862,7 @@ void CIOCPModel::_RecvProcess(PER_SOCKET_CONTEXT* pSocketContext, PER_IO_CONTEXT
|
|
{
|
|
{
|
|
OutputDebugString("B:完整包;\n");
|
|
OutputDebugString("B:完整包;\n");
|
|
pSocketContext->lastData.append(pIoContext->m_wsaBuf.buf + diflen, pIoContext->m_Overlapped.InternalHigh - diflen);
|
|
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();
|
|
pSocketContext->lastData.clear();
|
|
}
|
|
}
|
|
// 小包;
|
|
// 小包;
|
|
@@ -876,7 +877,7 @@ void CIOCPModel::_RecvProcess(PER_SOCKET_CONTEXT* pSocketContext, PER_IO_CONTEXT
|
|
OutputDebugString("B:超包;\n");
|
|
OutputDebugString("B:超包;\n");
|
|
// 组完成包;
|
|
// 组完成包;
|
|
pSocketContext->lastData.append(pIoContext->m_wsaBuf.buf + diflen, phead->len - PAK_LEN);
|
|
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();
|
|
pSocketContext->lastData.clear();
|
|
int last = pIoContext->m_Overlapped.InternalHigh - diflen - phead->len + PAK_LEN;
|
|
int last = pIoContext->m_Overlapped.InternalHigh - diflen - phead->len + PAK_LEN;
|
|
if (last)
|
|
if (last)
|
|
@@ -889,13 +890,20 @@ void CIOCPModel::_RecvProcess(PER_SOCKET_CONTEXT* pSocketContext, PER_IO_CONTEXT
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
-void CIOCPModel::_DeviceProc(PER_IO_CONTEXT* pIoContext, Package* pak)
|
|
|
|
|
|
+void CIOCPModel::_TaskProcess(PER_IO_CONTEXT* pIoContext, Package* pak)
|
|
{
|
|
{
|
|
- if ( pak->header.version != 0xAA )
|
|
|
|
|
|
+ if (pak->header.version == 0xAA)
|
|
{
|
|
{
|
|
- return;
|
|
|
|
|
|
+ _DeviceProc(pIoContext, pak);
|
|
|
|
+ }
|
|
|
|
+ else if (pak->header.version == 0xAB )
|
|
|
|
+ {
|
|
|
|
+ _CaptureProc(pIoContext, pak);
|
|
}
|
|
}
|
|
|
|
+}
|
|
|
|
|
|
|
|
+void CIOCPModel::_DeviceProc(PER_IO_CONTEXT* pIoContext, Package* pak)
|
|
|
|
+{
|
|
cJSON* pJson = cJSON_Parse((const char*)&pak->buf);
|
|
cJSON* pJson = cJSON_Parse((const char*)&pak->buf);
|
|
if ( pJson == NULL )
|
|
if ( pJson == NULL )
|
|
{
|
|
{
|
|
@@ -955,6 +963,11 @@ void CIOCPModel::_DeviceProc(PER_IO_CONTEXT* pIoContext, Package* pak)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+void CIOCPModel::_CaptureProc(PER_IO_CONTEXT* pIoContext, Package* pak)
|
|
|
|
+{
|
|
|
|
+
|
|
|
|
+}
|
|
|
|
+
|
|
/////////////////////////////////////////////////////////////////////
|
|
/////////////////////////////////////////////////////////////////////
|
|
// 判断客户端Socket是否已经断开,否则在一个无效的Socket上投递WSARecv操作会出现异常
|
|
// 判断客户端Socket是否已经断开,否则在一个无效的Socket上投递WSARecv操作会出现异常
|
|
// 使用的方法是尝试向这个socket发送数据,判断这个socket调用的返回值
|
|
// 使用的方法是尝试向这个socket发送数据,判断这个socket调用的返回值
|