|  | @@ -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调用的返回值
 |