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