www.pudn.com > AVChat0926.rar > CClientAdmin.cpp
//
// CClientAdmin.cpp
//
/*-----------------------------------------------------*\
HQ Tech, Make Technology Easy!
More information, please go to http://hqtech.nease.net.
/*-----------------------------------------------------*/
/************************************************************************/
/*
说明:主要用来控制作为客户端的程序行为.得于一些有关远程主机的IP,端口等信息.
*/
/************************************************************************/
#include "stdafx.h"
#include
#include "CClientAdmin.h"
#include "GlobalDefs.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////
CClientAdmin::CClientAdmin()
{
//命令传输端口号
mLocalUDPPort = CLIENT_UDP_PORT; //表示在CLIENT_UDP_PORT端口建立一个UDP监听
mTargetUDPPort = SERVER_UDP_PORT; //表示命令要发送到远程主机的SERVER_UDP_PORT端口
//媒体数据必须要设置的接收数据的端口号
//这里最好使用灵活的设置方式,端口号,IP地址均可自由设置,由构造函数带进来或直接设置
mVideoStream.SetLocalPort(VIDEO_UDP_PORT);
mAudioStream.SetLocalPort(AUDIO_UDP_PORT);
}
CClientAdmin::~CClientAdmin()
{
//Uninit();
}
//BOOL CClientAdmin::Init(void)
//{
// return CRoleAdmin::Init();
//}
//
//void CClientAdmin::Uninit(void)
//{
// CRoleAdmin::Uninit();
//}
//发送请求语音讨论的命令
BOOL CClientAdmin::CallServer(void)
{
return SendSimpleCommand(cmd_ClientCalling);
}
WORD CClientAdmin::GetVideoStreamReceivePort(void)
{
return mVideoStream.GetLocalPort();
}
SOCKET CClientAdmin::GetVideoStreamSocketSender()
{
return mVideoStream.GetSocketSender();
}
WORD CClientAdmin::GetAudioStreamReceivePort(void)
{
return mAudioStream.GetLocalPort();
}
SOCKET CClientAdmin::GetAudioStreamSocketSender()
{
return mAudioStream.GetSocketSender();
}
SOCKADDR_IN CClientAdmin::GetAudioTargetAddr()
{
SOCKADDR_IN Addr;
memset(&Addr,0,sizeof(Addr));
memset((char *) &Addr, 0, sizeof(Addr));
Addr.sin_family = AF_INET;
Addr.sin_addr.s_addr = htonl(mTargetIP);
Addr.sin_port = htons(AUDIO_UDP_PORT);
return Addr;
}
SOCKADDR_IN CClientAdmin::GetVideoTargetAddr()
{
SOCKADDR_IN Addr;
memset(&Addr,0,sizeof(Addr));
memset((char *) &Addr, 0, sizeof(Addr));
Addr.sin_family = AF_INET;
Addr.sin_addr.s_addr = htonl(mTargetIP);
Addr.sin_port = htons(VIDEO_UDP_PORT);
return Addr;
}
bool CClientAdmin::ReceiveMessage(MessageT inMessage,
void * ioParam,
void * ioParam2)
{
switch (inMessage)
{
case msg_UDPCommandReceived:
{
UDP_Pack * pCmd = (UDP_Pack*) ioParam;
pCmd->my_ntoh();
// Process different commands
switch (pCmd->command)
{
case cmd_DeviceConfig:
// Save the remote device config
SetDeviceConfig(pCmd->param1 << 2);
// Send local device config to the peer
SendLocalDeviceConfigToPeer();
break;
case cmd_DisconnectRequest:
{
BOOL isBuilding = FALSE;
Broadcast(msg_ModifyFilterGraph, &isBuilding);
}
break;
case cmd_UDPSocketAccepted:
{
mVideoStream.SetTargetIP(mMulticastIP);
mVideoStream.SetTargetPort(VIDEO_UDP_PORT);
mVideoStream.CreateSender();
mAudioStream.SetTargetIP(mMulticastIP);
mAudioStream.SetTargetPort(AUDIO_UDP_PORT);
mAudioStream.CreateSender();
SendSimpleCommand(cmd_BuildFilterGraph);
// Now the client must begin to build filter graph too
BOOL isBuilding = TRUE;
Broadcast(msg_ModifyFilterGraph, &isBuilding);
}
}
}
return true;
}
return CRoleAdmin::ReceiveMessage(inMessage, ioParam, ioParam2);
}