412 lines
14 KiB
C++
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();
|
||
|
}
|
||
|
}
|