浏览代码

细分出协议给截图使用;(未完成)

scbc.sat2 5 年之前
父节点
当前提交
bf1a5589fd
共有 2 个文件被更改,包括 26 次插入10 次删除
  1. 23 10
      SATHelper/SATHelper/IOCPModel.cpp
  2. 3 0
      SATHelper/SATHelper/IOCPModel.h

+ 23 - 10
SATHelper/SATHelper/IOCPModel.cpp

@@ -1,6 +1,7 @@
 #include "StdAfx.h"
 #include "IOCPModel.h"
 //#include "MainDlg.h"
+#include "MemoryDef.h"
 
 // 每一个处理器上产生多少个线程(为了最大限度的提升服务器性能,详见配套文档)
 #define WORKER_THREADS_PER_PROCESSOR 2
@@ -762,7 +763,7 @@ void CIOCPModel::_ShowMessage(const CString szFormat,...) const
 		TRACE( strMessage+_T("\n") );
 	}
 #else
-	Global::WriteTextLog(strMessage);
+	//Global::WriteTextLog(strMessage);
 #endif
 }
 
@@ -787,7 +788,7 @@ void CIOCPModel::_RecvProcess(PER_SOCKET_CONTEXT* pSocketContext, PER_IO_CONTEXT
 			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);
 			}
 		}
 	}
@@ -816,7 +817,7 @@ void CIOCPModel::_RecvProcess(PER_SOCKET_CONTEXT* pSocketContext, PER_IO_CONTEXT
 				{
 					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)
@@ -861,7 +862,7 @@ void CIOCPModel::_RecvProcess(PER_SOCKET_CONTEXT* pSocketContext, PER_IO_CONTEXT
 				{
 					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,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);
 	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调用的返回值

+ 3 - 0
SATHelper/SATHelper/IOCPModel.h

@@ -266,7 +266,10 @@ protected:
 	void _ShowMessage( const CString szFormat,...) const;
 
 	void _RecvProcess(PER_SOCKET_CONTEXT* pSocketContext, PER_IO_CONTEXT* pIoContext);
+	void _TaskProcess(PER_IO_CONTEXT* pIoContext, Package* pak);
+	// 具体处理;
 	void _DeviceProc(PER_IO_CONTEXT* pIoContext, Package *pak);
+	void _CaptureProc(PER_IO_CONTEXT* pIoContext, Package* pak);
 private:
 
 	HANDLE                       m_hShutdownEvent;              // 用来通知线程系统退出的事件,为了能够更好的退出线程