📄 tvmeetingdlg.cpp
字号:
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 + -