www.pudn.com > IP_phone.rar > ConnectionSocket.cpp


/**********************************************************/ 
/*类名:CConnectionSocket                                 */ 
/*简述:用于消息和指令接收的scoket                        */ 
/**********************************************************/ 
// ConnectionSocket.cpp : implementation file 
// 
 
#include "stdafx.h" 
#include "ConnectionSocket.h" 
//#include "../NC_ClientDlg.h" 
 
#ifdef _DEBUG 
#define new DEBUG_NEW 
#undef THIS_FILE 
static char THIS_FILE[] = __FILE__; 
#endif 
 
///////////////////////////////////////////////////////////////////////////// 
// CConnectionSocket 
 
CConnectionSocket::CConnectionSocket(CNC_ClientDlg *temp) 
{ 
	// 
	m_dlg=temp; 
} 
 
CConnectionSocket::~CConnectionSocket() 
{ 
} 
 
 
// Do not edit the following lines, which are needed by ClassWizard. 
#if 0 
BEGIN_MESSAGE_MAP(CConnectionSocket, CAsyncSocket) 
	//{{AFX_MSG_MAP(CConnectionSocket) 
	//}}AFX_MSG_MAP 
END_MESSAGE_MAP() 
#endif	// 0 
 
///////////////////////////////////////////////////////////////////////////// 
// CConnectionSocket member functions 
void CConnectionSocket::OnReceive(int nErrorCode)  
{ 
	struct TalkFrame *frame; 
	m_pBuffer=new char[1024]; 
	frame=(struct TalkFrame *)m_pBuffer; 
	 
	int iLen=sizeof(struct TalkFrame); 
	while(iLen>0) 
	{ 
		int i=Receive(m_pBuffer+sizeof(struct TalkFrame)-iLen,iLen); 
		if(i==SOCKET_ERROR) 
			return ; 
		iLen-=i; 
	} 
	 
	iLen=frame->iLen; 
	frame->iLen; 
	while(iLen>0) 
	{ 
		int i=Receive(m_pBuffer+sizeof(struct TalkFrame)+(frame->iLen - iLen),iLen); 
		if (i==SOCKET_ERROR) 
			return; 
		iLen-=i; 
	} 
 
	if(strcmp(frame->cFlag,"CON")==0) 
	{ 
		CString add; 
		UINT port; 
		if(strcmp(frame->cContent,"agree")==0) 
		{ 
			AfxMessageBox("连接成功,请等待会议的开始!"); 
			//改变系统状态变量 
			m_dlg->LoadStateIcon(1); 
			m_dlg->AddSysMsg(0,"系统正在等待会议开始命令..."); 
			m_dlg->UpdateData(false); 
			return; 
		} 
		else  
		{ 
			if(strcmp(frame->cContent,"refuse")==0) 
			{ 
				AfxMessageBox("服务器拒绝了你!"); 
				//改变系统状态变量 
				m_dlg->AddSysMsg(0,"服务器拒绝连接!"); 
				m_dlg->UpdateData(false); 
				m_dlg->bconnect=false; 
				// 
			} 
		} 
 
		return; 
	} 
	if(strcmp(frame->cFlag,"MSG")==0) 
	{ 
		//添加系统消息 
		m_dlg->AddSysMsg(1,frame->cContent); 
		m_dlg->UpdateData(false); 
	} 
	if(strcmp(frame->cFlag,"ORD")==0) 
	{ 
		if(strcmp(frame->cContent,"begin")==0) 
		{ 
			m_dlg->Start(); 
			 
			//改变系统状态变量 
			m_dlg->LoadStateIcon(2); 
			m_dlg->AddSysMsg(1,"会议开始!"); 
			m_dlg->UpdateData(false); 
			return; 
		} 
		else  
		{ 
			// 
		} 
	} 
	if(strcmp(frame->cFlag,"POR")==0) 
	{ 
		CString temp_port=frame->cContent; 
		m_dlg->send_port=atoi(temp_port); 
	} 
	////////////////// 
 
	CAsyncSocket::OnReceive(nErrorCode); 
	//CSocket::OnReceive(nErrorCode); 
} 
/////////////////////////////////////////////////////// 
void CConnectionSocket::OnConnect(int nErrorCode)  
{ 
	if (nErrorCode != 0) 
	{ 
		AfxMessageBox("连接失败!\n请确认服务器地址!"); 
        //改变系统状态变量 
		m_dlg->bconnect=false; 
		return ; 
	} 
	char buffer[256]; 
	memset(buffer,0,256); 
	struct TalkFrame *frame; 
	frame = (struct TalkFrame *)buffer; 
 
	//使用CNetSettingInfo类 
	LPNETINFO netinfo; 
	CNetSettingInfo m_NetSettingInfo; 
	netinfo=m_NetSettingInfo.GetNetInfo(); 
	ASSERT(netinfo); 
	sprintf(frame->HostName,netinfo->HostName);	 
 
	sprintf(frame->cFlag,"CON"); 
	frame->iLen = 0; 
	sprintf(frame->cContent,"apply"); 
	Send(buffer,sizeof(struct TalkFrame)); 
 
	CAsyncSocket::OnConnect(nErrorCode); 
	//CSocket::OnConnect(nErrorCode); 
}