windows-nt/Source/XPSP1/NT/net/tapi/skywalker/apps/t3testph/event.cpp
2020-09-26 16:20:57 +08:00

412 lines
14 KiB
C++

#include "stdafx.h"
#include "t3test.h"
#include "t3testD.h"
#include "externs.h"
void
CT3testDlg::HandleCallHubEvent( IDispatch * pEvent )
{
HRESULT hr;
ITCallHubEvent * pCallHubEvent;
CALLHUB_EVENT che;
hr = pEvent->QueryInterface(
IID_ITCallHubEvent,
(void **)&pCallHubEvent
);
if (!SUCCEEDED(hr))
{
return;
}
hr = pCallHubEvent->get_Event( &che );
if (!SUCCEEDED(hr))
{
return;
}
switch ( che )
{
case CHE_CALLHUBNEW:
break;
case CHE_CALLHUBIDLE:
break;
default:
break;
}
pCallHubEvent->Release();
}
void
CT3testDlg::HandleTapiObjectMessage( IDispatch * pEvent )
{
ITTAPIObjectEvent * pte;
HRESULT hr;
TAPIOBJECT_EVENT te;
hr = pEvent->QueryInterface(
IID_ITTAPIObjectEvent,
(void**)&pte
);
if ( !SUCCEEDED(hr) )
{
return;
}
pte->get_Event( &te );
switch (te)
{
case TE_ADDRESSCREATE:
case TE_ADDRESSREMOVE:
ReleaseMediaTypes();
ReleaseTerminals();
ReleaseCalls();
ReleasePhones();
ReleaseSelectedTerminals();
ReleaseCreatedTerminals();
ReleaseTerminalClasses();
ReleaseListen();
ReleaseAddresses();
InitializeAddressTree();
break;
case TE_PHONECREATE:
case TE_PHONEREMOVE:
{
ITAddress * pSelectedAddress;
ITTAPIObjectEvent2 * pTAPIObjectEvent2;
ITPhone * pPhone;
BSTR bstrName = NULL;
hr = pte->QueryInterface(IID_ITTAPIObjectEvent2, (void **)&pTAPIObjectEvent2);
if (SUCCEEDED(hr))
{
hr = pTAPIObjectEvent2->get_Phone( &pPhone );
if (SUCCEEDED(hr))
{
hr = pPhone->get_PhoneCapsString( PCS_PHONENAME, &bstrName );
if (SUCCEEDED(hr))
{
switch(te)
{
case TE_PHONECREATE:
::MessageBox(NULL, bstrName, L"TE_PHONECREATE", MB_OK);
break;
case TE_PHONEREMOVE:
::MessageBox(NULL, bstrName, L"TE_PHONEREMOVE", MB_OK);
break;
}
SysFreeString( bstrName );
}
pPhone->Release();
}
pTAPIObjectEvent2->Release();
}
if ( GetAddress( &pSelectedAddress ) )
{
ReleasePhones();
UpdatePhones( pSelectedAddress );
}
}
break;
default:
break;
}
pte->Release();
}
void
CT3testDlg::HandleAddressEvent( IDispatch * pEvent )
{
ITAddressEvent * pAddressEvent;
ITTerminal * pTerminal;
ITAddress * pAddress;
ITAddress * pSelectedAddress;
LONG lMediaType;
LONG lSelectedMediaType;
BSTR bstrName = NULL;
ADDRESS_EVENT ae;
HRESULT hr;
hr = pEvent->QueryInterface(IID_ITAddressEvent, (void **)&pAddressEvent);
if (SUCCEEDED(hr))
{
hr = pAddressEvent->get_Event( &ae );
if (SUCCEEDED(hr))
{
if ( (ae == AE_NEWTERMINAL) || (ae == AE_REMOVETERMINAL) )
{
hr = pAddressEvent->get_Terminal( &pTerminal );
if (SUCCEEDED(hr))
{
hr = pTerminal->get_Name( &bstrName );
if (SUCCEEDED(hr))
{
hr = pAddressEvent->get_Address( &pAddress );
if (SUCCEEDED(hr))
{
hr = pTerminal->get_MediaType( &lMediaType );
if (SUCCEEDED(hr))
{
if (CT3testDlg::GetMediaType( &lSelectedMediaType ) && ( lSelectedMediaType == lMediaType) &&
CT3testDlg::GetAddress( &pSelectedAddress ) && ( pSelectedAddress == pAddress) )
{
switch(ae)
{
case AE_NEWTERMINAL:
::MessageBox(NULL, bstrName, L"AE_NEWTERMINAL", MB_OK);
break;
case AE_REMOVETERMINAL:
::MessageBox(NULL, bstrName, L"AE_REMOVETERMINAL", MB_OK);
break;
}
CT3testDlg::ReleaseTerminals();
CT3testDlg::UpdateTerminals( pAddress, lMediaType );
}
}
pAddress->Release();
}
SysFreeString( bstrName );
}
pTerminal->Release();
}
}
}
pAddressEvent->Release();
}
}
void
CT3testDlg::HandlePhoneEvent( IDispatch * pEvent )
{
ITPhoneEvent * pPhoneEvent;
ITPhone * pPhone;
PHONE_EVENT pe;
HRESULT hr;
hr = pEvent->QueryInterface(IID_ITPhoneEvent, (void **)&pPhoneEvent);
if (SUCCEEDED(hr))
{
hr = pPhoneEvent->get_Event( &pe );
if (SUCCEEDED(hr))
{
hr = pPhoneEvent->get_Phone( &pPhone );
if ( SUCCEEDED(hr) )
{
switch( pe )
{
case PE_DISPLAY:
::MessageBox(NULL, L"", L"PE_DISPLAY", MB_OK);
break;
case PE_LAMPMODE:
::MessageBox(NULL, L"", L"PE_LAMPMODE", MB_OK);
break;
case PE_RINGMODE:
::MessageBox(NULL, L"", L"PE_RINGMODE", MB_OK);
break;
case PE_RINGVOLUME:
::MessageBox(NULL, L"", L"PE_RINGVOLUME", MB_OK);
break;
case PE_HOOKSWITCH:
{
PHONE_HOOK_SWITCH_DEVICE HookSwitchDevice;
PHONE_HOOK_SWITCH_STATE HookSwitchState;
WCHAR szText[256];
hr = pPhoneEvent->get_HookSwitchDevice( &HookSwitchDevice );
if ( SUCCEEDED(hr) )
{
hr = pPhoneEvent->get_HookSwitchState( &HookSwitchState );
if ( SUCCEEDED(hr) )
{
switch( HookSwitchDevice )
{
case PHSD_HANDSET:
lstrcpyW(szText, L"PHSD_HANDSET");
break;
case PHSD_SPEAKERPHONE:
lstrcpyW(szText, L"PHSD_SPEAKERPHONE");
break;
case PHSD_HEADSET:
lstrcpyW(szText, L"PHSD_HEADSET");
break;
}
switch( HookSwitchState )
{
case PHSS_ONHOOK:
lstrcatW(szText, L" PHSS_ONHOOK");
break;
case PHSS_OFFHOOK:
lstrcatW(szText, L" PHSS_OFFHOOK");
break;
}
//::MessageBox(NULL, szText, L"PE_HOOKSWITCH", MB_OK);
}
}
}
break;
case PE_CAPSCHANGE:
::MessageBox(NULL, L"", L"PE_CAPSCHANGE", MB_OK);
break;
case PE_BUTTON:
{
long lButtonId;
BSTR pButtonText;
WCHAR szText[256];
PHONE_BUTTON_STATE ButtonState;
hr = pPhoneEvent->get_ButtonLampId( &lButtonId );
if ( SUCCEEDED(hr) )
{
hr = pPhone->get_ButtonText( lButtonId, &pButtonText );
if ( SUCCEEDED( hr ) )
{
lstrcpyW(szText, pButtonText);
//wsprintf(szText, L"%d", lButtonId);
hr = pPhoneEvent->get_ButtonState( &ButtonState );
if ( SUCCEEDED( hr ) )
{
switch( ButtonState )
{
case PBS_UP:
lstrcatW(szText, L" PBS_UP");
/*
if ((lButtonId >= PT_KEYPADZERO) && (lButtonId <= PT_KEYPADPOUND))
{
ITAutomatedPhoneControl * pPhoneControl;
//
// get the automated phone control interface
//
hr = pPhone->QueryInterface(IID_ITAutomatedPhoneControl, (void **)&pPhoneControl);
if (S_OK != hr)
{
::MessageBox(NULL, L"QueryInterface failed", NULL, MB_OK);
return;
}
PHONE_TONE Tone;
pPhoneControl->get_Tone(&Tone);
if ((long)Tone == lButtonId)
{
hr = pPhoneControl->StopTone();
}
pPhoneControl->Release();
}
*/
break;
case PBS_DOWN:
lstrcatW(szText, L" PBS_DOWN");
/*
if ((lButtonId >= PT_KEYPADZERO) && (lButtonId <= PT_KEYPADPOUND))
{
ITAutomatedPhoneControl * pPhoneControl;
//
// get the automated phone control interface
//
hr = pPhone->QueryInterface(IID_ITAutomatedPhoneControl, (void **)&pPhoneControl);
if (S_OK != hr)
{
::MessageBox(NULL, L"QueryInterface failed", NULL, MB_OK);
return;
}
hr = pPhoneControl->StartTone((PHONE_TONE)lButtonId, 0);
pPhoneControl->Release();
}
*/
break;
case PBS_UNKNOWN:
lstrcatW(szText, L" PBS_UNKNOWN");
break;
case PBS_UNAVAIL:
lstrcatW(szText, L" PBS_UNAVAIL");
break;
}
//::MessageBox(NULL, szText, L"PE_BUTTON", MB_OK);
}
//SysFreeString( pButtonText );
}
}
}
break;
case PE_CLOSE:
::MessageBox(NULL, L"", L"PE_CLOSE", MB_OK);
break;
case PE_NUMBERGATHERED:
{
BSTR pNumberGathered;
hr = pPhoneEvent->get_NumberGathered( &pNumberGathered );
if ( SUCCEEDED(hr) && (pNumberGathered != NULL) )
{
::MessageBox(NULL, pNumberGathered, L"PE_NUMBERGATHERED", MB_OK);
}
}
break;
}
pPhone->Release();
}
}
pPhoneEvent->Release();
}
}