Преглед изворни кода

完成基本的通信功能:剩余是通信拆包、粘包问题处理

Jeff пре 3 година
родитељ
комит
1a4969c2b1

+ 0 - 61
Source/OGCAssist/OGCAssist/OGCAssist.cpp

@@ -599,10 +599,8 @@ namespace Assist
 		// 备份寄存器;
 		__asm pushad;
 
-
 		MessageBox(NULL, _T("Call_MyCheckFW"), _T("MyCheckFW"), MB_OK);
 
-
 		__asm{
 			// 恢复寄存器; 
 			popad;
@@ -629,63 +627,4 @@ namespace Assist
 			jmp _cd_CheckFW_CommunicationError.dwBack2Addr;
 		}
 	}
-
-	void __declspec(naked) SetChannel()
-	{
-		// 备份寄存器;
-		__asm{
-			// 保存寄存器;
-			mov dwEAX, EAX;
-			mov dwEBX, EBX;
-			mov dwECX, ECX;
-			mov dwEDX, EDX;
-			mov dwEBP, EBP;
-			mov dwESP, ESP;
-			mov dwESI, ESI;
-			mov dwEDI, EDI;
-		}
-
-		MessageBox(NULL, _T("MyGo Function"), _T("MyGo"), MB_OK);
-
-		__asm{
-			// 恢复寄存器; 
-			mov EAX, dwEAX;
-			mov EBX, dwEBX;
-			mov ECX, dwECX;
-			mov EDX, dwEDX;
-			mov EBP, dwEBP;
-			mov ESP, dwESP;
-			mov ESI, dwESI;
-			mov EDI, dwEDI;
-			// 最后返回原Call地址下一行;
-			jmp _cd_Go.dwBack2Addr;
-		}
-	}
-
-	void SetSN(LPCTSTR lpSN)
-	{
-
-	}
-
-	void ChangeSDK(int nSDK)   // 0=410SDK, 1=310SDK;
-	{
-
-	}
-
-	void __declspec(naked) Call_Connect()
-	{
-		//dwCallAddr = 0x004D5864;//0x004378B0;
-		/*dwCallAddr = 0x004378B0;
-		__asm {
-		pushad;
-		mov eax,0x02393F78;
-		mov ebx,0x024856CC;
-		mov ecx,0x004AB16C;
-		mov edx,0x024156CC;
-		call dwCallAddr;
-		popad;
-		}*/
-		dwCallAddr = 0x00415DFC;
-		__asm call dwCallAddr;
-	}
 };

+ 19 - 19
Source/OGCAssist/OGCAssist/PipeClient.cpp

@@ -151,6 +151,11 @@ DWORD CPipeClient::ReadMsgThread(LPVOID lpParam)
             }
         }
 
+		DATAHEADER header;
+		MSG_INFO msg_info;
+		memcpy(&header, m_IoRead.szBuffer, sizeof(DATAHEADER));
+		memcpy(&msg_info, m_IoRead.szBuffer+sizeof(DATAHEADER), sizeof(MSG_INFO));
+
         // 重置Buffer;
         memset(m_IoRead.szBuffer, 0, BUFSIZE);
 #else // 分配的缓冲区,不足以一次性存储C/S两端的通信内容时;
@@ -275,32 +280,27 @@ BOOL CPipeClient::WaitFinish(HANDLE hPipe, PER_IO_CONTEXT *pIoContext)
 	return TRUE;
 }
 
-BOOL CPipeClient::SendMessage(PACKAGE &pak)
+BOOL CPipeClient::SendPackage(PACKAGE &pak)
 {
-	// 是否连接了服务端;
-	if ( m_hPipeInst == INVALID_HANDLE_VALUE ) 
-		return FALSE;
-
-	// 是否初始化了句柄;
-
-	return FALSE;
+	std::string data;
+	data.append((char*)&pak.header, sizeof(DATAHEADER));
+	//data.append((char*)(MSG_INFO*)pak.buf, sizeof(MSG_INFO));
+	data.append((char*)pak.buf, sizeof(MSG_INFO));
+	return SendData((LPBYTE)data.data(), data.size());
 }
 
-BOOL CPipeClient::SendData(const TCHAR *lpszMsg, DWORD dwDataLen)
+BOOL CPipeClient::SendData(LPBYTE lpData, DWORD dwDataLen)
 {
 	if ( m_hPipeInst == INVALID_HANDLE_VALUE ) 
 		return FALSE;
 
-	static int i = 0;
+	if ( !lpData || dwDataLen == 0 )
+		return FALSE;
+
+	// 发送数据使用同步模式;
 	DWORD dwNumberOfBytesWritten = 0;
-	char szMsg[255] = {0};//"你好----001";
-	sprintf(szMsg, "发送内容00000000000000000000000000000000000000000000000000000000000000000000000000000000000000:%d,%d", ::GetCurrentProcessId(), i++);
-	BOOL fWrite = WriteFile(m_hPipeInst,szMsg,strlen(szMsg),&dwNumberOfBytesWritten, NULL);//;&m_IoWrite.m_Overlapped);
-	//WaitFinish(m_hPipeInst, &m_IoWrite);
-	if ( fWrite )
-	{
-		Utility::dprintf(_T("SendData:%s\n"),szMsg);
-	}
+	BOOL fWrite = WriteFile(m_hPipeInst, lpData, dwDataLen, &dwNumberOfBytesWritten, NULL);
+	Utility::dprintf(_T("SendData:Error=%ld, %s\n"), GetLastError(), lpData);
 
-	return TRUE;
+	return fWrite;
 }

+ 2 - 2
Source/OGCAssist/OGCAssist/PipeClient.h

@@ -56,6 +56,6 @@ public:
 	// 等待重叠IO完成;
 	static BOOL WaitFinish(HANDLE hPipe, PER_IO_CONTEXT *pIoContext);
 	// 发送消息给服务端;
-	BOOL SendMessage(PACKAGE &pak);
-	BOOL SendData(const TCHAR *lpszMsg, DWORD dwDataLen);
+	BOOL SendPackage(PACKAGE &pak);
+	BOOL SendData(LPBYTE lpData, DWORD dwDataLen);
 };

+ 2 - 1
Source/OGCAssist/OGCAssist/Protocol.h

@@ -53,7 +53,8 @@ typedef struct _HEADER_
 // 헝헹관
 typedef struct _PACKAGE_ {
 	DATAHEADER	header;
-	BYTE		buf[4]; // 야竟코휭(寧濾뒈囹);
+	//BYTE		buf[4]; // 야竟코휭(寧濾뒈囹);
+	LPVOID		buf;
 }PACKAGE, *LPPACKAGE;
 
 typedef struct _MSG_INFO_

+ 18 - 3
Source/OGCAssist/OGCAssist/dllmain.cpp

@@ -47,11 +47,26 @@ int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
 	}
 	
 	int i = 0;
-	TCHAR szData[36] = {0};
+	TCHAR szData[MAX_PATH] = {0};
 	while (true)
 	{
-		_stprintf(szData, _T("·¢ËÍÄÚÈÝ£º%d,%d"), ::GetCurrentProcessId(), i++);
-		Utility::g_pPipeClient->SendData(szData, _tcslen(szData));
+#if 0
+		_stprintf(szData, _T("·¢ËÍÄÚÈÝ00000000000000000000000000000000000000000£º%d, %d"), ::GetCurrentProcessId(), i++);
+		Utility::g_pPipeClient->SendData((LPBYTE)szData, _tcslen(szData));
+#else
+		MSG_INFO msg_info;
+		msg_info.dwClientId = GetCurrentProcessId();
+		_stprintf(msg_info.szClientName, _T("%s"), _T("OGCAssist"));
+		msg_info.byResult = TRUE;
+		_stprintf((char*)msg_info.byData, _T("%s"), _T("OGCAssist dfdfdfdfdfdfdfdfdf"));
+
+		PACKAGE pak;
+		pak.header.byMsgType = C2S_DISCONNECT;
+		pak.header.dwPackageLen = sizeof(DATAHEADER) + sizeof(MSG_INFO);
+		pak.buf = &msg_info;
+
+		Utility::g_pPipeClient->SendPackage(pak);
+#endif
 		Sleep(500);
 	}