www.pudn.com > 密聊源程序.rar > ClientSocket.cpp


// ClientSocket.cpp : implementation file 
// 
 
#include "stdafx.h" 
#include "SecretChat.h"		//应用程序类头文件 
#include "ClientSocket.h" 
#include "SecretChatDlg.h"	//主窗口类头文件 
 
#ifdef _DEBUG 
#define new DEBUG_NEW 
#undef THIS_FILE 
static char THIS_FILE[] = __FILE__; 
#endif 
 
#define WM_CANCELINSTANCE ( WM_USER + 2)	//关闭窗口消息 
///////////////////////////////////////////////////////////////////////////// 
// CClientSocket 
 
 
CClientSocket::CClientSocket() 
{ 
} 
 
CClientSocket::~CClientSocket() 
{ 
} 
 
 
// Do not edit the following lines, which are needed by ClassWizard. 
#if 0 
BEGIN_MESSAGE_MAP(CClientSocket, CSocket) 
	//{{AFX_MSG_MAP(CClientSocket) 
	//}}AFX_MSG_MAP 
END_MESSAGE_MAP() 
#endif	// 0 
 
///////////////////////////////////////////////////////////////////////////// 
// CClientSocket member functions 
 
void CClientSocket::OnReceive(int nErrorCode)	//接收服务器数据事件 
{	 
	if(0 != nErrorCode) 
	{	//发送错误 
		AfxMessageBox("接收数据出错-1"); 
		return; 
	} 
 
	CSecretChatDlg * pMain = (CSecretChatDlg *)AfxGetMainWnd(); 
	MessagePackage msg; 
	int n;					//实际接收到数据的字节数 
	n = Receive(&msg, sizeof(MessagePackage));	//接收客户机数据 
 
	if(0 > n) 
	{	//发送错误 
		AfxMessageBox("接收数据出错-2"); 
		return; 
	} 
 
	//错误提示 
	pMain->CuoWuTiShi(); 
 
	/**********当收到的是对方发过来的消息************/ 
	if(msg.head == HEAD_TEXT) //收到的是正文 
	{ 
		pMain->Receive(msg);	//在这里会调用接收消息的线程 
	} 
 
	else if(msg.head == HEAD_REVERT_TEXT) //发出的正文就收到的是回复 
	{ 
		pMain->ReceiveRevert(msg); 
	} 
 
	else if(msg.head == HEAD_DISCONNECTION) //收到的是断开提示 
	{ 
		pMain->disconnection_message(msg); 
	} 
 
	else if(msg.head == HEAD_ZAIXIANBIAOJI)		//在线通知 
	{ 
		pMain->m_zai_xian_biao_ji = 0;	//取消等待时间记录 
	} 
 
	else if(msg.head == HEAD_VERSION)		//对方版本号和一些其他信息 
	{	 
		pMain->message_version(msg); 
	} 
 
	else if(msg.head == HEAD_CLAIM_PUBLIC_KEY) //对方的请求获得公钥 
	{ 
		pMain->ClaimPublicKey(msg); 
	} 
 
	else if(msg.head == HEAD_REVERT_PUBLIC_KEY) //收到对方发过来的公钥 
	{		 
		pMain->RevertPublicKey(msg); 
	} 
 
	else if(msg.head == HEAD_DIGITAL_SIGNATURE) //对方的数字签名,看看我这里有没有它的公钥,可以在请求获得它的公钥 
	{ 
		if(msg.ID == HEAD_DIGITAL_SIGNATURE_NO) 
		{	//对方还没识别我这条消息的身份 
			MessageBox( 
				NULL, 
				"对方不是 "  
				+ pMain->GetFriendName()  
				+ " 好友或没有 "  
				+ pMain->GetUserName()  
				+ " 用户的公钥", 
				"发送失败身份不确认", 
				MB_ICONEXCLAMATION); 
		} 
	} 
 
	else if(msg.head == HEAD_SENDFILE) //对方发来了文件及相关信息 
	{ 
		pMain->receive_file(msg); 
	} 
 
	/******************************/ 
 
	//要求读、写、关闭通知,会出错 
//	AsyncSelect(FD_READ | FD_WRITE | FD_CLOSE); 
}