www.pudn.com > AVChat0926.rar > CServerAdmin.cpp


// 
// CServerAdmin.cpp 
// 
 
/*-----------------------------------------------------*\ 
			HQ Tech, Make Technology Easy!        
 More information, please go to http://hqtech.nease.net. 
/*-----------------------------------------------------*/ 
 
#include "stdafx.h" 
#include  
#include "CServerAdmin.h" 
#include "GlobalDefs.h" 
 
#ifdef _DEBUG 
#define new DEBUG_NEW 
#undef THIS_FILE 
static char THIS_FILE[] = __FILE__; 
#endif 
 
///////////////////////////////////////////////////////////////////////// 
CServerAdmin::CServerAdmin() 
{ 
	mLocalUDPPort  = SERVER_UDP_PORT; 
	mTargetUDPPort = CLIENT_UDP_PORT; 
 
	mVideoStream.SetLocalPort(VIDEO_UDP_PORT); 
	mAudioStream.SetLocalPort(AUDIO_UDP_PORT); 
} 
 
CServerAdmin::~CServerAdmin() 
{ 
} 
 
WORD CServerAdmin::GetVideoStreamReceivePort(void) 
{ 
	return mVideoStream.GetLocalPort(); 
} 
 
SOCKET CServerAdmin::GetVideoStreamSocketSender() 
{ 
	return mVideoStream.GetSocketSender(); 
} 
 
WORD CServerAdmin::GetAudioStreamReceivePort(void) 
{ 
	return mAudioStream.GetLocalPort(); 
} 
 
SOCKET CServerAdmin::GetAudioStreamSocketSender() 
{ 
	return mAudioStream.GetSocketSender(); 
} 
 
SOCKADDR_IN CServerAdmin::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 CServerAdmin::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 CServerAdmin::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_ClientCalling: 
				// Retrieve the client IP first 
				SetTargetIP(ntohl(inet_addr((char*)ioParam2))); 
				// Send local device config to the peer 
				SendLocalDeviceConfigToPeer(); 
				break; 
 
			case cmd_DeviceConfig: 
				// Save the remote device config 
				SetDeviceConfig(pCmd->param1 << 2); 
				// Begin to create Multicast socket 
				mVideoStream.SetTargetIP(mMulticastIP); 
				mVideoStream.SetTargetPort(VIDEO_UDP_PORT); 
				mVideoStream.CreateSender(); 
 
				mAudioStream.SetTargetIP(mMulticastIP); 
				mAudioStream.SetTargetPort(AUDIO_UDP_PORT); 
				mAudioStream.CreateSender(); 
 
			   SendSimpleCommand(cmd_UDPSocketAccepted); 
				break; 
 
			case cmd_BuildFilterGraph: 
				{ 
					// Now the server begins to build filter graph 
					BOOL isBuilding = TRUE; 
					Broadcast(msg_ModifyFilterGraph, &isBuilding); 
				} 
				break; 
 
			case cmd_DisconnectRequest: 
				{ 
					BOOL isBuilding = FALSE; 
					Broadcast(msg_ModifyFilterGraph, &isBuilding); 
				} 
				break; 
			} 
		} 
		return true; 
	} 
 
	return CRoleAdmin::ReceiveMessage(inMessage, ioParam, ioParam2); 
}