소스 검색

将通信声明的结构体,使用命名空间包裹,防止同名声明;

scbc.sat2 5 년 전
부모
커밋
39b4ae644a
3개의 변경된 파일82개의 추가작업 그리고 67개의 파일을 삭제
  1. 46 42
      SATService/SATService/SATProtocol.h
  2. 35 24
      SATService/SATService/SATTCPServer.cpp
  3. 1 1
      SATService/SATService/SATTCPServer.h

+ 46 - 42
SATService/SATService/SATProtocol.h

@@ -3,51 +3,55 @@
 
 #pragma once
 
-//////////////////////////////////////////////////////////////////////////
-// 具体协议指令;
-enum ProtocolCMD
-{
-	// 登录、登出;
-	CMD_LOGIN					= 0,
-	CMD_LOGOUT					= 1,
-	// 设备;
-	CMD_ADD_DEVICE				= 2,
-	CMD_DEL_DEVICE				= 3,
-	CMD_QUERY_DEVICES			= 4,
-};
-
+namespace SATProtocol{
+	//////////////////////////////////////////////////////////////////////////
+	// 具体协议指令;
+	enum ProtocolCMD {
+		// 登录、登出;
+		CMD_LOGIN					= 0,
+		CMD_LOGOUT					= 1,
+		// 设备;
+		CMD_ADD_DEVICE				= 2,
+		CMD_DEL_DEVICE				= 3,
+		CMD_QUERY_DEVICES			= 4,
+	};
+
+	//////////////////////////////////////////////////////////////////////////
+	// 通信数据声明;
 #pragma pack(push)
 #pragma pack(1)
-
-typedef struct _DATAHEADER_ {
-	// 协议标识符;
-	byte			protocol;
-	// 当前通信包的长度=header长度+buf长度;
-	unsigned int	len;
-	// 命令类型;
-	byte			cmd;
-}DataHeader, *pDataHeader;
-
-// 请求包
-typedef struct _PACKAGE_
-{
-	DataHeader	header;
-	byte		buf[4]; // 具体内容(指针地址);
-}Package;
-
-// 默认返回值;
-typedef struct __TPRESPONSE__
-{
-	bool bResult;
-}TPResponse, *pTPResponse;
-
-// 用于登录/登出;
-typedef struct __TPLOGIN__
-{
-	char		szUserName[MAX_PATH];
-	char		szPassword[MAX_PATH];
-}TPLogin, *pTPLogin;
+	// 数据头;
+	typedef struct _DATAHEADER_ {
+		// 协议标识符;
+		byte			protocol;
+		// 当前通信包的长度=header长度+buf长度;
+		unsigned int	len;
+		// 命令类型;
+		byte			cmd;
+	}DataHeader, *pDataHeader;
+
+	// 请求包
+	typedef struct _PACKAGE_ {
+		DataHeader	header;
+		byte		buf[4]; // 具体内容(指针地址);
+	}Package;
+
+	// 用于登录/登出;
+	typedef struct __USERINFO__
+	{
+		char		szUserName[MAX_PATH];
+		char		szPassword[MAX_PATH];
+	}UserInfo, *pUserInfo;
+
+	// 登录返回;
+	typedef struct __LOGIN_RESP__  {
+		// true登录成功;
+		bool		bStatus;
+		// 描述(暂时不用);
+		char		szMessage[MAX_PATH];
+	}LoginResp, *pLoginResp;
 
 #pragma pack(pop)
+}
 
 #endif // __SAT_PROTOCOL__

+ 35 - 24
SATService/SATService/SATTCPServer.cpp

@@ -767,11 +767,11 @@ void CSATTCPServer::_ShowMessage(const CString szFormat,...) const
 #endif
 }
 
-#define PAK_LEN sizeof(DataHeader)
+#define PAK_LEN sizeof(SATProtocol::DataHeader)
 void CSATTCPServer::_RecvProcess(PER_SOCKET_CONTEXT* pSocketContext, PER_IO_CONTEXT* pIoContext)
 {
 	// 小于包头;
-	DataHeader* phead = NULL;
+	SATProtocol::DataHeader* phead = NULL;
 	if (pSocketContext->lastData.size() == 0)
 	{
 		// 不足包头;
@@ -783,13 +783,13 @@ void CSATTCPServer::_RecvProcess(PER_SOCKET_CONTEXT* pSocketContext, PER_IO_CONT
 		else
 		{
 			// 包头充足;
-			phead = (DataHeader*)pIoContext->m_wsaBuf.buf;
+			phead = (SATProtocol::DataHeader*)pIoContext->m_wsaBuf.buf;
 
 			// 完整的包;
 			if (phead->len == pIoContext->m_Overlapped.InternalHigh)
 			{
 				OutputDebugString("A:完整的包;\n");
-				_TaskProcess(pIoContext, (Package*)pIoContext->m_wsaBuf.buf);
+				_TaskProcess(pIoContext, (SATProtocol::Package*)pIoContext->m_wsaBuf.buf);
 			}
 			// 小包;
 			else if (phead->len > pIoContext->m_Overlapped.InternalHigh)
@@ -802,7 +802,7 @@ void CSATTCPServer::_RecvProcess(PER_SOCKET_CONTEXT* pSocketContext, PER_IO_CONT
 			{
 				OutputDebugString("A:超包;\n");
 				pSocketContext->lastData.append(pIoContext->m_wsaBuf.buf + phead->len, pIoContext->m_Overlapped.InternalHigh - phead->len);
-				_TaskProcess(pIoContext, (Package*)pIoContext->m_wsaBuf.buf);
+				_TaskProcess(pIoContext, (SATProtocol::Package*)pIoContext->m_wsaBuf.buf);
 			}
 		}
 	}
@@ -811,14 +811,14 @@ void CSATTCPServer::_RecvProcess(PER_SOCKET_CONTEXT* pSocketContext, PER_IO_CONT
 		int lastlen = pIoContext->m_Overlapped.InternalHigh;
 		if (pSocketContext->lastData.size() >= PAK_LEN)
 		{
-			phead = (DataHeader*)pSocketContext->lastData.data();
+			phead = (SATProtocol::DataHeader*)pSocketContext->lastData.data();
 			if (phead->len <= pSocketContext->lastData.size() + pIoContext->m_Overlapped.InternalHigh)
 			{
 				if ( phead->len <= pSocketContext->lastData.size() )
 				{
 					OutputDebugString("C:超包;\n");
 					// 完整包;
-					_TaskProcess(pIoContext, (Package*)pSocketContext->lastData.substr(0, phead->len).data());
+					_TaskProcess(pIoContext, (SATProtocol::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);
@@ -829,7 +829,7 @@ void CSATTCPServer::_RecvProcess(PER_SOCKET_CONTEXT* pSocketContext, PER_IO_CONT
 					lastlen = pSocketContext->lastData.size() + pIoContext->m_Overlapped.InternalHigh - phead->len;
 					pSocketContext->lastData.append(pIoContext->m_wsaBuf.buf, pIoContext->m_Overlapped.InternalHigh - lastlen);
 					// 完整包;
-					_TaskProcess(pIoContext, (Package*)pSocketContext->lastData.data());
+					_TaskProcess(pIoContext, (SATProtocol::Package*)pSocketContext->lastData.data());
 					// 剩余包;
 					pSocketContext->lastData.clear();
 					if (lastlen)
@@ -856,14 +856,14 @@ void CSATTCPServer::_RecvProcess(PER_SOCKET_CONTEXT* pSocketContext, PER_IO_CONT
 			{
 				// 拼成完整包头;
 				pSocketContext->lastData.append(pIoContext->m_wsaBuf.buf, diflen);
-				phead = (DataHeader*)pSocketContext->lastData.data();
+				phead = (SATProtocol::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);
-					_TaskProcess(pIoContext, (Package*)pSocketContext->lastData.data());
+					_TaskProcess(pIoContext, (SATProtocol::Package*)pSocketContext->lastData.data());
 					pSocketContext->lastData.clear();
 				}
 				// 小包;
@@ -878,7 +878,7 @@ void CSATTCPServer::_RecvProcess(PER_SOCKET_CONTEXT* pSocketContext, PER_IO_CONT
 					OutputDebugString("B:超包;\n");
 					// 组完成包;
 					pSocketContext->lastData.append(pIoContext->m_wsaBuf.buf + diflen, phead->len - PAK_LEN);
-					_TaskProcess(pIoContext, (Package*)pSocketContext->lastData.data());
+					_TaskProcess(pIoContext, (SATProtocol::Package*)pSocketContext->lastData.data());
 					pSocketContext->lastData.clear();
 					int last = pIoContext->m_Overlapped.InternalHigh - diflen - phead->len + PAK_LEN;
 					if (last)
@@ -891,42 +891,53 @@ void CSATTCPServer::_RecvProcess(PER_SOCKET_CONTEXT* pSocketContext, PER_IO_CONT
 	}
 }
 
-void CSATTCPServer::_TaskProcess(PER_IO_CONTEXT* pIoContext, Package* pak)
+void CSATTCPServer::_TaskProcess(PER_IO_CONTEXT* pIoContext, SATProtocol::Package* pak)
 {
 #ifdef _DEBUG
-	OutputDebugString("成功获取数据\n");
+	OutputDebugString("\n########成功获取数据########\n\n");
 #endif
-	DataHeader *pHeader = &pak->header;
+	SATProtocol::DataHeader *pHeader = &pak->header;
 	if ( !pHeader ) 
 		return;
 
 	if ( pHeader->protocol == 0xAA ) {
-		if ( pHeader->cmd == CMD_LOGIN ) {// 登录;
-			TPLogin *pLogin = (TPLogin*)pak->buf;
+		if ( pHeader->cmd == SATProtocol::CMD_LOGIN ) {// 登录;
+			SATProtocol::UserInfo *pLogin = (SATProtocol::UserInfo*)pak->buf;
 			bool bRet = CSATExecutor::GetInstance()->Login(pLogin->szUserName, pLogin->szPassword);
 
 			// 计算数据包长度;
-			long len = sizeof(DataHeader)+sizeof(TPResponse);
+			long len = sizeof(SATProtocol::DataHeader)+sizeof(SATProtocol::LoginResp);
 			byte *pbuff = new byte[len];
-			Package *pSendPak = (Package *)pbuff;
+			SATProtocol::Package *pSendPak = (SATProtocol::Package *)pbuff;
 			pSendPak->header.protocol = 0xAA;
-			pSendPak->header.cmd = CMD_LOGIN;
+			pSendPak->header.cmd = SATProtocol::CMD_LOGIN;
 			pSendPak->header.len = len;
+#if 0
 			// 复制内容到指针中;
 			memcpy(pSendPak->buf, &bRet, sizeof(bool));
 
-			int ret = send(pIoContext->m_sockAccept, (const char*)pbuff, len, 0);
+			char szMessage[MAX_PATH] = {0};
+			_stprintf_s(szMessage, _T("登录……"));
+			memcpy(pSendPak->buf + sizeof(bool), szMessage, MAX_PATH);
+#else
+			SATProtocol::LoginResp *pLoginResp = (SATProtocol::LoginResp*)(pbuff+sizeof(SATProtocol::DataHeader));
+			pLoginResp->bStatus = bRet;
+			_stprintf_s(pLoginResp->szMessage, _T("登录描述……"));
+#endif
+
+			// 发送,无须判断是否发送成功;
+			send(pIoContext->m_sockAccept, (const char*)pbuff, len, 0);
 		}
-		else if ( pHeader->cmd == CMD_LOGOUT ) {// 登出;
+		else if ( pHeader->cmd == SATProtocol::CMD_LOGOUT ) {// 登出;
 
 		}
-		else if ( pHeader->cmd == CMD_ADD_DEVICE ) {// 添加设备;
+		else if ( pHeader->cmd == SATProtocol::CMD_ADD_DEVICE ) {// 添加设备;
 
 		}
-		else if ( pHeader->cmd == CMD_DEL_DEVICE ) {// 删除设备;
+		else if ( pHeader->cmd == SATProtocol::CMD_DEL_DEVICE ) {// 删除设备;
 
 		}
-		else if ( pHeader->cmd == CMD_QUERY_DEVICES ) {// 查询设备;
+		else if ( pHeader->cmd == SATProtocol::CMD_QUERY_DEVICES ) {// 查询设备;
 
 		}
 		else {// 无效指令;

+ 1 - 1
SATService/SATService/SATTCPServer.h

@@ -235,7 +235,7 @@ 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 _TaskProcess(PER_IO_CONTEXT* pIoContext, SATProtocol::Package *pak);
 private:
 
 	HANDLE                       m_hShutdownEvent;              // 用来通知线程系统退出的事件,为了能够更好的退出线程