⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tvmeetingdlg.cpp

📁 用c++做的视频会议源代码
💻 CPP
📖 第 1 页 / 共 5 页
字号:
			switch(*((short*)buf))//check the flag
			{
			case FLAG_PORT:
				{
				//命令
					pDlg->OnDistributePort1((PACK_PORT*)buf,iLen,m_addrIn);	
					//AfxMessageBox("PORT 11");
				}
				break;
			case FLAG_AUDIO:
				{	
					THREAD_TRANSMIT tm1;
					tm1.len=iLen;
					tm1.sc=m_addrIn;

					if(pDlg->m_ClientInfoList.GetCount()==0)
						break;
					if (pDlg->m_nDistributePort1==0)// wzz 4-15
						break;

					strIP.Format("%d.%d.%d.%d",
					m_addrIn.sin_addr.S_un.S_un_b.s_b1,
					m_addrIn.sin_addr.S_un.S_un_b.s_b2,
					m_addrIn.sin_addr.S_un.S_un_b.s_b3,
					m_addrIn.sin_addr.S_un.S_un_b.s_b4);	
					
					if(pDlg->m_hAudioDecode)
						PostThreadMessage(pDlg->m_dwAudioDecodeId,IOM_AUDIO,(WPARAM)&tm1,(LPARAM)buf);

				}
				break;
				
			}
			
		}
		else
		{
			if(!pDlg->m_ARecSocket1.IsSocket())
				break;
		}//the socket should be closed,that is m_Socket have been
		//destroyed,so break the loop and end the thread
	}
	return 0;
}
DWORD WINAPI CTVMeetingDlg::SockARecThreadProc2(LPVOID lpParameter)
{
	CTVMeetingDlg* pDlg=(CTVMeetingDlg*)lpParameter;
	CString strRecieve,strIP;
	char buf[244];
	int iLen=0;
	sockaddr_in m_addrIn;
	while(1)
	{
		iLen=pDlg->m_ARecSocket2.RecvFrom(buf,244,(sockaddr*)&m_addrIn);
		if(iLen>0)
		{
			
			switch(*((short*)buf))//check the flag
			{
			case FLAG_PORT:
				{
				//命令
					pDlg->OnDistributePort2((PACK_PORT*)buf,iLen,m_addrIn);	
				//	AfxMessageBox("PORT 12");
				}
				break;

			case FLAG_AUDIO:
				{	
					THREAD_TRANSMIT tm1;
					tm1.len=iLen;
					tm1.sc=m_addrIn;
					if(pDlg->m_ClientInfoList.GetCount()==0)
						break;
					if (pDlg->m_nDistributePort2==0)// wzz 4-15
						break;
					strIP.Format("%d.%d.%d.%d",
					m_addrIn.sin_addr.S_un.S_un_b.s_b1,
					m_addrIn.sin_addr.S_un.S_un_b.s_b2,
					m_addrIn.sin_addr.S_un.S_un_b.s_b3,
					m_addrIn.sin_addr.S_un.S_un_b.s_b4);	

					if(pDlg->m_hAudioDecode2)
						PostThreadMessage(pDlg->m_dwAudioDecodeId2,IOM_AUDIO2,(WPARAM)&tm1,(LPARAM)buf);

				}
				break;
				
			}
			
		}
		else
		{
			if(!pDlg->m_ARecSocket2.IsSocket())
				break;
		}//the socket should be closed,that is m_Socket have been
		//destroyed,so break the loop and end the thread
	}
	return 0;
}
DWORD WINAPI CTVMeetingDlg::SockARecThreadProc3(LPVOID lpParameter)
{
	CTVMeetingDlg* pDlg=(CTVMeetingDlg*)lpParameter;
	CString strRecieve,strIP;
	char buf[244];
	int iLen=0;
	sockaddr_in m_addrIn;
	while(1)
	{
		iLen=pDlg->m_ARecSocket3.RecvFrom(buf,244,(sockaddr*)&m_addrIn);
		if(iLen>0)
		{
			
			switch(*((short*)buf))//check the flag
			{
			case FLAG_PORT:
				{
				//命令
					pDlg->OnDistributePort3((PACK_PORT*)buf,iLen,m_addrIn);	
				//	AfxMessageBox("PORT 13");
				}
				break;

			case FLAG_AUDIO:
				{	
					THREAD_TRANSMIT tm1;
					tm1.len=iLen;
					tm1.sc=m_addrIn;
					if(pDlg->m_ClientInfoList.GetCount()==0)
						break;
					if (pDlg->m_nDistributePort3==0)// wzz 4-15
						break;
					strIP.Format("%d.%d.%d.%d",
					m_addrIn.sin_addr.S_un.S_un_b.s_b1,
					m_addrIn.sin_addr.S_un.S_un_b.s_b2,
					m_addrIn.sin_addr.S_un.S_un_b.s_b3,
					m_addrIn.sin_addr.S_un.S_un_b.s_b4);	

					if(pDlg->m_hAudioDecode3)
						PostThreadMessage(pDlg->m_dwAudioDecodeId3,IOM_AUDIO3,(WPARAM)&tm1,(LPARAM)buf);

					
				}
				break;
				
			}
			
		}
		else
		{
			if(!pDlg->m_ARecSocket3.IsSocket())
				break;
		}//the socket should be closed,that is m_Socket have been
		//destroyed,so break the loop and end the thread
	}
	return 0;
}
void CTVMeetingDlg::OnDistributePort1(PACK_PORT *pp, int len,sockaddr_in m_scIn)
{
	CString strIP,str;
	switch(pp->cmd)
	{
	case CMD_DISPORT:
		{
			
			sockaddr_in sc= m_scIn;	
			strIP.Format("%d.%d.%d.%d",
				sc.sin_addr.S_un.S_un_b.s_b1,
				sc.sin_addr.S_un.S_un_b.s_b2,
				sc.sin_addr.S_un.S_un_b.s_b3,
				sc.sin_addr.S_un.S_un_b.s_b4);		
			char sDisIP[20];
			strcpy(sDisIP,strIP.GetBuffer(strIP.GetLength()));
			sockaddr_in m_DisPort;
			m_DisPort.sin_family=AF_INET;
			m_DisPort.sin_addr.s_addr=CUDPSocket::Name2Inet(sDisIP);
			m_DisPort.sin_port=htons(pp->m_Port);
			PACK_PORT p;
			p.flag=FLAG_PORT;
			p.cmd=CMD_DISPORTOK;
			p.type=0;
			p.m_Port=pp->m_Port;
			if (PortBusy[0]==0)
				p.busy=0;
			else
			if (PortBusy[0]==1)
				p.busy=1;
			CString str;
			str.Format("%d",p.busy);
			m_AVSocket.SendTo((char*)&p,sizeof(PACK_PORT),(sockaddr*)&m_DisPort);
		}
		break;
		case CMD_DISPORTOK:
		{
			sockaddr_in sc= m_scIn;	
			strIP.Format("%d.%d.%d.%d",
				sc.sin_addr.S_un.S_un_b.s_b1,
				sc.sin_addr.S_un.S_un_b.s_b2,
				sc.sin_addr.S_un.S_un_b.s_b3,
				sc.sin_addr.S_un.S_un_b.s_b4);	
			
			if ( pp->busy==0 && PortBusy[0]==0) // ok 可以分配该端口
			{
				str.Format("*** %s %d Distribute OK! ",strIP,PORT+11);
				DistributeIP[0]=strIP;
				bIsPortChecking=false;
				WriteLogInfoToCtrl(str);
				// 状态确认
				PortBusy[0]=1;
				char sDisIP[20];
				strcpy(sDisIP,strIP.GetBuffer(strIP.GetLength()));
				sockaddr_in m_DisPort;
				m_DisPort.sin_family=AF_INET;
				m_DisPort.sin_addr.s_addr=CUDPSocket::Name2Inet(sDisIP);
				m_DisPort.sin_port=htons(PORT+11);
				PACK_PORT p;
				p.flag=FLAG_PORT;
				p.cmd=CMD_DISPORTCOMFRIM;
				p.type=0;
				p.m_Port=PORT+11;
				m_nDistributePort1=PORT+11;
				m_AVSocket.SendTo((char*)&p,sizeof(PACK_PORT),(sockaddr*)&m_DisPort);

			}
			else
			{
					
				str.Format("*** %s %d Is Busy! ",strIP,pp->m_Port);
					WriteLogInfoToCtrl(str);
					char sDisIP[20];
					strcpy(sDisIP,strIP.GetBuffer(strIP.GetLength()));
					sockaddr_in m_DisPort;
					m_DisPort.sin_family=AF_INET;
					m_DisPort.sin_addr.s_addr=CUDPSocket::Name2Inet(sDisIP);
					m_DisPort.sin_port=htons(PORT+12);
					PACK_PORT p;
					p.flag=FLAG_PORT;
					p.cmd=CMD_DISPORT;
					p.type=0;
					p.m_Port=PORT+12;
					m_AVSocket.SendTo((char*)&p,sizeof(PACK_PORT),(sockaddr*)&m_DisPort);

			}
			

		}
		break;
		case CMD_DISPORTCOMFRIM:
		{
			sockaddr_in sc= m_scIn;	
			strIP.Format("%d.%d.%d.%d",
				sc.sin_addr.S_un.S_un_b.s_b1,
				sc.sin_addr.S_un.S_un_b.s_b2,
				sc.sin_addr.S_un.S_un_b.s_b3,
				sc.sin_addr.S_un.S_un_b.s_b4);
			CString str;
			str.Format("*** %s confirm my port:%d",strIP,pp->m_Port);
			DistributeIP[0]=strIP;
			PortBusy[0]=1;
			m_nDistributePort1=PORT+11;
			WriteLogInfoToCtrl(str);


		}
		break;
		
	}
}
void CTVMeetingDlg::OnDistributePort2(PACK_PORT *pp, int len,sockaddr_in m_scIn)
{
	CString strIP;
	switch(pp->cmd)
	{
	case CMD_DISPORT:
		{
			
			sockaddr_in sc= m_scIn;	
			strIP.Format("%d.%d.%d.%d",
				sc.sin_addr.S_un.S_un_b.s_b1,
				sc.sin_addr.S_un.S_un_b.s_b2,
				sc.sin_addr.S_un.S_un_b.s_b3,
				sc.sin_addr.S_un.S_un_b.s_b4);		
			char sDisIP[20];
			strcpy(sDisIP,strIP.GetBuffer(strIP.GetLength()));
			sockaddr_in m_DisPort;
			m_DisPort.sin_family=AF_INET;
			m_DisPort.sin_addr.s_addr=CUDPSocket::Name2Inet(sDisIP);
			m_DisPort.sin_port=htons(pp->m_Port);
			PACK_PORT p;
			p.flag=FLAG_PORT;
			p.cmd=CMD_DISPORTOK;
			p.type=0;
			p.m_Port=pp->m_Port;
			if (PortBusy[1]==0)
				p.busy=0;
			else
			if (PortBusy[1]==1)
				p.busy=1;
			m_AVSocket.SendTo((char*)&p,sizeof(PACK_PORT),(sockaddr*)&m_DisPort);
		} break;
		case CMD_DISPORTOK:
		{
			CString str;
			sockaddr_in sc= m_scIn;	
			strIP.Format("%d.%d.%d.%d",
				sc.sin_addr.S_un.S_un_b.s_b1,
				sc.sin_addr.S_un.S_un_b.s_b2,
				sc.sin_addr.S_un.S_un_b.s_b3,
				sc.sin_addr.S_un.S_un_b.s_b4);		
			if (pp->busy==0 && PortBusy[1]==0)//
			{
				str.Format("*** %s %d Distribute OK! ",strIP,PORT+12);
				DistributeIP[1]=strIP;
				PortBusy[1]=1;
				bIsPortChecking=false;
				WriteLogInfoToCtrl(str);
				
				char sDisIP[20];
				strcpy(sDisIP,strIP.GetBuffer(strIP.GetLength()));
				sockaddr_in m_DisPort;
				m_DisPort.sin_family=AF_INET;
				m_DisPort.sin_addr.s_addr=CUDPSocket::Name2Inet(sDisIP);
				m_DisPort.sin_port=htons(PORT+12);
				PACK_PORT p;
				p.flag=FLAG_PORT;
				p.cmd=CMD_DISPORTCOMFRIM;
				p.type=0;
				p.m_Port=PORT+12;
				m_nDistributePort2=PORT+12;
				m_AVSocket.SendTo((char*)&p,sizeof(PACK_PORT),(sockaddr*)&m_DisPort);


			}
			else
			{
				CString str;	
				str.Format("*** %s %d Is Busy! ",strIP,pp->m_Port);
					WriteLogInfoToCtrl(str);
					char sDisIP[20];
					strcpy(sDisIP,strIP.GetBuffer(strIP.GetLength()));
					sockaddr_in m_DisPort;
					m_DisPort.sin_family=AF_INET;
					m_DisPort.sin_addr.s_addr=CUDPSocket::Name2Inet(sDisIP);
					m_DisPort.sin_port=htons(PORT+13);
					PACK_PORT pp;
					pp.flag=FLAG_PORT;
					pp.cmd=CMD_DISPORT;
					pp.type=0;
					pp.m_Port=PORT+13;
					m_AVSocket.SendTo((char*)&pp,sizeof(PACK_PORT),(sockaddr*)&m_DisPort);

			}
		} break;
		case CMD_DISPORTCOMFRIM:
		{
			sockaddr_in sc= m_scIn;	
			strIP.Format("%d.%d.%d.%d",
				sc.sin_addr.S_un.S_un_b.s_b1,
				sc.sin_addr.S_un.S_un_b.s_b2,
				sc.sin_addr.S_un.S_un_b.s_b3,
				sc.sin_addr.S_un.S_un_b.s_b4);
			CString str;
			str.Format("*** %s confirm my port:%d",strIP,pp->m_Port);
			DistributeIP[1]=strIP;
			PortBusy[1]=1;
			m_nDistributePort2=PORT+12;
			WriteLogInfoToCtrl(str);


		}
		break;
	}
}
void CTVMeetingDlg::OnDistributePort3(PACK_PORT *pp, int len,sockaddr_in m_scIn)
{
	CString strIP;
	switch(pp->cmd)
	{
	case CMD_DISPORT:
		{
			
			sockaddr_in sc= m_scIn;	
			strIP.Format("%d.%d.%d.%d",
				sc.sin_addr.S_un.S_un_b.s_b1,
				sc.sin_addr.S_un.S_un_b.s_b2,
				sc.sin_addr.S_un.S_un_b.s_b3,
				sc.sin_addr.S_un.S_un_b.s_b4);		
			char sDisIP[20];
			strcpy(sDisIP,strIP.GetBuffer(strIP.GetLength()));
			sockaddr_in m_DisPort;
			m_DisPort.sin_family=AF_INET;
			m_DisPort.sin_addr.s_addr=CUDPSocket::Name2Inet(sDisIP);
			m_DisPort.sin_port=htons(pp->m_Port);
			PACK_PORT p;
			p.flag=FLAG_PORT;
			p.cmd=CMD_DISPORTOK;
			p.type=0;
			p.m_Port=pp->m_Port;
			if (PortBusy[2]==0)
				p.busy=0;
			else
			if (PortBusy[2]==1)
				p.busy=1;
			m_AVSocket.SendTo((char*)&p,sizeof(PACK_PORT),(sockaddr*)&m_DisPort);
		} break;
		case CMD_DISPORTOK:
		{
			CString str;
			sockaddr_in sc= m_scIn;	
			strIP.Format("%d.%d.%d.%d",
				sc.sin_addr.S_un.S_un_b.s_b1,
				sc.sin_addr.S_un.S_un_b.s_b2,
				sc.sin_addr.S_un.S_un_b.s_b3,
				sc.sin_addr.S_un.S_un_b.s_b4);		
			if (pp->busy==0 && PortBusy[2]==0)//
			{
				str.Format("*** %s %d Distribute OK! ",strIP,PORT+13);
				DistributeIP[2]=strIP;
				PortBusy[2]=1;
				bIsPortChecking=false;
				WriteLogInfoToCtrl(str);
				// 状态确认
				
				char sDisIP[20];
				strcpy(sDisIP,strIP.GetBuffer(strIP.GetLength()));
				sockaddr_in m_DisPort;
				m_DisPort.sin_family=AF_INET;
				m_DisPort.sin_addr.s_addr=CUDPSocket::Name2Inet(sDisIP);
				m_DisPort.sin_port=htons(PORT+13);
				PACK_PORT p;
				p.flag=FLAG_PORT;
				p.cmd=CMD_DISPORTCOMFRIM;
				p.type=0;
				//p.busy=1;
				p.m_Port=PORT+13;
				m_nDistributePort3=PORT+13;

				m_AVSocket.SendTo((char*)&p,sizeof(PACK_PORT),(sockaddr*)&m_DisPort);
				//AfxMessageBox("send");


			}
			else
			{
				CString str;
					str.Format("*** %s %d Is Busy! ",strIP,pp->m_Port);
					WriteLogInfoToCtrl(str);
					char sDisIP[20];
					strcpy(sDisIP,strIP.GetBuffer(strIP.GetLength()));
					sockaddr_in m_DisPort;
					m_DisPort.sin_family=AF_INET;
					m_DisPort.sin_addr.s_addr=CUDPSocket::Name2Inet(sDisIP);
					m_DisPort.sin_port=htons(PORT+11);
					PACK_PORT pp;
					pp.flag=FLAG_PORT;
					pp.cmd=CMD_DISPORT;
					pp.type=0;
					pp.m_Port=PORT+11;
					m_AVSocket.SendTo((char*)&pp,sizeof(PACK_PORT),(sockaddr*)&m_DisPort);

			}
		} break;
		case CMD_DISPORTCOMFRIM:
		{
			sockaddr_in sc= m_scIn;	
			strIP.Format("%d.%d.%d.%d",
				sc.sin_addr.S_un.S_un_b.s_b1,
				sc.sin_addr.S_un.S_un_b.s_b2,
				sc.sin_addr.S_un.S_un_b.s_b3,
				sc.sin_addr.S_un.S_un_b.s_b4);
			CString str;
			str.Format("*** %s confirm my port:%d",strIP,pp->m_Port);

			DistributeIP[2]=strIP;
			PortBusy[2]=1;
			m_nDistributePort3=PORT+13;
			WriteLogInfoToCtrl(str);

		}
		break;
	}

}
void CTVMeetingDlg::OnCommand(PACK_CMD *ppc, int len,sockaddr_in m_scIn)
{
	CString strIP,sSelIP,strDisplay,sTmpIP,szIP;

	switch(ppc->cmd)
	{
	case CMD_JOIN:
		{
			if (bIsPortChecking==true)  //正在监测端口
				break;
			if(ppc->type==0)
			{
				char sz[50];
				sockaddr_in sc= m_scIn;	
				strIP.Format("%d.%d.%d.%d",
					sc.sin_addr.S_un.S_un_b.s_b1,
					sc.sin_addr.S_un.S_un_b.s_b2,
					sc.sin_addr.S_un.S_un_b.s_b3,
					sc.sin_addr.S_un.S_un_b.s_b4);					
					
				//////////////////////////////////////////////////////////////
				bool isWantConnect=false;
				for (int i=0;i<MAX_CONNECT_USER;i++)
				{
					if (sIP[i]==strIP)
					{

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -