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);
}