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

📄 0avdconfdlg.cpp

📁 VC++视频开发实例集锦(包括“远程视频监控”"语音识别系统"等13个经典例子)
💻 CPP
📖 第 1 页 / 共 2 页
字号:
    
	hr = pEvent->get_Session(&pSession);

    if (FAILED(hr))
    {
        
        return;
    }

    switch ( enState )
	{
	case RTCSS_INCOMING:
        {
			

            
            RTC_SESSION_TYPE enType;
            
			hr = pSession->get_Type(&enType);

            if (FAILED(hr))
            {
                
                SAFE_RELEASE(pSession);
                return;
            }            

            if (enType == RTCST_IM)
            {
                
                m_pClient->PlayRing(RTCRT_MESSAGE, VARIANT_TRUE);
            }
            else            
            {
                
                if ((m_AVDlg) && (m_AVDlg.GetState() != RTCSS_IDLE))
                {
                    
                    
                    pSession->Terminate(RTCTR_BUSY);

                    SAFE_RELEASE(pSession);
                    return;
                }
                    
                
                IRTCEnumParticipants * pEnum = NULL;
                IRTCParticipant * pParticipant = NULL;

                hr = pSession->EnumerateParticipants(&pEnum);

                if (FAILED(hr))
                {
                    
                    SAFE_RELEASE(pSession);
                    return;
                }

                hr = pEnum->Next(1, &pParticipant, NULL);

                SAFE_RELEASE(pEnum);

                if (hr != S_OK)
                {
                    
                    SAFE_RELEASE(pSession);
                    return;
                }

                
                BSTR bstrURI = NULL;

                hr = pParticipant->get_UserURI(&bstrURI);

                if (FAILED(hr))
                {
                    
                    SAFE_RELEASE(pSession);
                    SAFE_RELEASE(pParticipant);
                    return;
                }

                
                BSTR bstrName = NULL;
                hr = pParticipant->get_Name(&bstrName);

                SAFE_RELEASE(pParticipant);

                if (FAILED(hr))
                {
                    
                    SAFE_FREE_STRING(bstrURI);
                    SAFE_RELEASE(pSession);
                    return;
                }

                
                m_pClient->PlayRing(RTCRT_PHONE, VARIANT_TRUE);

                
                BOOL fAccept;
				CIncomingDlg	cDlg;	   
				SESSION_DATA	pData;

				pData.bstrName = bstrName;
				pData.bstrURI = bstrURI;

				SetWindowLong ( m_hWnd, GWL_USERDATA, (LONG)&pData);
				
				
				fAccept = (cDlg.DoModal() == IDOK);

				
				SAFE_FREE_STRING(bstrURI);
				SAFE_FREE_STRING(bstrName);
                    
                if (fAccept)
                {
                    
                    hr = pSession->Answer();

                    if (FAILED(hr))
                    {
                        
                        SAFE_RELEASE(pSession);
                        return;
                    }
                }
                else
                {
                    
                    pSession->Terminate(RTCTR_REJECT);

					SAFE_RELEASE(pSession);
                    return;
                }
            }  
            
            
            
            hr = AddSession(pSession, enType);

            if (FAILED(hr))
            {
                
                SAFE_RELEASE(pSession);
                return;
            }
        }        
		break;
	}

    
	if (m_AVDlg)
		m_AVDlg.SetState (enState);
}







void CAVDConfDlg::OnRTCMediaEvent(IRTCMediaEvent *pEvent)
{
    long lMediaType;
    RTC_MEDIA_EVENT_TYPE enType;
    RTC_MEDIA_EVENT_REASON enReason;
    HRESULT hr;

	hr = pEvent->get_MediaType(&lMediaType);

    if (FAILED(hr))
    {
        
        return;
    }

    hr = pEvent->get_EventType(&enType);			  
    if (FAILED(hr))
    {
        
        return;
    }

    hr = pEvent->get_EventReason(&enReason);

    if (FAILED(hr))
    {
        
        return;
    }

	if ((m_AVDlg) && (m_AVDlg.GetState () != RTCSS_IDLE))
    {
        
        m_AVDlg.DeliverMedia(lMediaType, enType, enReason);
    }
}







void CAVDConfDlg::OnRTCIntensityEvent(IRTCIntensityEvent *pEvent)
{
    RTC_AUDIO_DEVICE enDevice;
    long lLevel, lMin, lMax;
    HRESULT hr;

    
	hr = pEvent->get_Direction(&enDevice);

    if (FAILED(hr))
    {
        
        return;
    }

    hr = pEvent->get_Level(&lLevel);

    if (FAILED(hr))
    {
        
        return;
    }

    hr = pEvent->get_Min(&lMin);

    if (FAILED(hr))
    {
        
        return;
    }

    hr = pEvent->get_Max(&lMax);

    if (FAILED(hr))
    {
        
        return;
    }

    
    if ((lMax - lMin) == 0)
    {
        lLevel = 0;
    }
    else
    {
        lLevel = (lLevel - lMin) * 100 / (lMax - lMin);
    }

	if (m_AVDlg.GetState () != RTCSS_IDLE)
    {
        
        m_AVDlg.DeliverIntensity(enDevice, lLevel);
    }
}







void CAVDConfDlg::OnRTCClientEvent(IRTCClientEvent *pEvent)
{
    HRESULT hr;

    
    RTC_CLIENT_EVENT_TYPE enEventType;

    hr = pEvent->get_EventType(&enEventType);

    if (FAILED(hr))
    {
        
        return;
    }

    if ( enEventType == RTCCET_ASYNC_CLEANUP_DONE )
    {
        m_pClient->Shutdown();
		SAFE_RELEASE(m_pClient);
		
        
        DestroyWindow();
    }
    else
    {
        if (m_AVDlg.GetState() != RTCSS_IDLE)
        {
            
            m_AVDlg.DeliverClient(enEventType);
        }
    }
}








HRESULT CAVDConfDlg::AddSession(IRTCSession *pSession, RTC_SESSION_TYPE enType)
{
    
    BOOL fAVSession = (enType != RTCST_IM);

    
	
	if (fAVSession)
	{
		BOOL ret = m_AVDlg.Create (IDD_AVDLG,this);
		if (!ret)
		{
			MessageBox ( "Error Creating Dialog" );
		}
		m_AVDlg.ShowWindow (SW_SHOW);
		m_AVDlg.SetParentClient (m_pClient);
		m_AVDlg.SetSession (pSession);
	}
	else
	{
		BOOL ret = m_cMessageDlg.Create (IDD_MESSAGEDLG, this);
		if (!ret)
		{
			MessageBox ( "Error Creating Dialog" );
		}
		m_cMessageDlg.ShowWindow (SW_SHOW);
		m_cMessageDlg.SetParentClient ( m_pClient );
		m_cMessageDlg.SetSession (pSession);

	}

	return S_OK;
}









HRESULT CAVDConfDlg::OnRTCMessagingEvent(IRTCMessagingEvent *pEvent)
{
    IRTCSession * pSession = NULL;
    
    IRTCParticipant * pParticipant = NULL;
    RTC_MESSAGING_EVENT_TYPE enType;
    RTC_MESSAGING_USER_STATUS enStatus;
    BSTR bstrContentType = NULL;
    BSTR bstrMessage = NULL;
    HRESULT hr;

    hr = pEvent->get_Session(&pSession);

    if (FAILED(hr))
    {
        
        return S_FALSE;
    }
    
    hr = pEvent->get_EventType(&enType);

    if (FAILED(hr))
    {
        
        return S_FALSE;
    }

    hr = pEvent->get_Participant(&pParticipant);

    if (FAILED(hr))
    {
        
        return S_FALSE;
    }

    if (enType == RTCMSET_MESSAGE)
    {
        hr = pEvent->get_MessageHeader(&bstrContentType);

        if (FAILED(hr))
        {
            
            SAFE_RELEASE(pParticipant);
            return S_FALSE;
        }

        hr = pEvent->get_Message(&bstrMessage);

        if (FAILED(hr))
        {
            
            SAFE_RELEASE(pParticipant);
            SAFE_FREE_STRING(bstrContentType);
            return S_FALSE;
        }

        
        if (m_cMessageDlg)
			m_cMessageDlg.DeliverMessage(pParticipant, bstrContentType, bstrMessage);

        SAFE_FREE_STRING(bstrContentType);
        SAFE_FREE_STRING(bstrMessage);
    }
    else if (enType == RTCMSET_STATUS)
    {
        hr = pEvent->get_UserStatus(&enStatus);

        if (FAILED(hr))
        {
            
            return S_FALSE;
        }

        
        m_cMessageDlg.DeliverUserStatus(pParticipant, enStatus);
    }

    SAFE_RELEASE(pParticipant); 
	
	return S_OK;
}







void CAVDConfDlg::OnOK() 
{
	if (m_pClient)
	{
		m_pClient->StopT120Applets();

		m_pClient->PrepareForShutdown();

		if (m_pEvents)
		{
			m_pEvents->Unadvise( m_pClient);
		}
	}


	CDialog::OnOK();
}








void CAVDConfDlg::OnCancel ()
{	
	MessageBox ( "Please use the shutdown\nbutton to quit." );
	return;
}







void CAVDConfDlg::OnAboutbox() 
{
	CAboutDlg dlgAbout;
	dlgAbout.DoModal();
}

⌨️ 快捷键说明

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