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

📄 tapieventprocess.h

📁 智能安防报警系统
💻 H
字号:

#pragma once
//defined by user
#define WM_PRIVATETAPIEVENT				WM_USER + 101

// CTAPIEventNotification 是 ITTAPIEventNotification接口的实现类
class CTAPIEventNotification : public ITTAPIEventNotification
{
private:
    LONG       m_dwRefCount;

public:
	HWND m_hWnd;

    // Event实现函数
    HRESULT STDMETHODCALLTYPE Event(
                                    TAPI_EVENT TapiEvent,
                                    IDispatch * pEvent
                                   );
   
// 其它COM接口
public:

    //
    // 构造函数
    //
    CTAPIEventNotification()
    {
        m_dwRefCount = 1;
    }

    //
    // 析构函数
    //
    ~CTAPIEventNotification()
    {
    }

    // IUnknown 实现函数
	HRESULT STDMETHODCALLTYPE QueryInterface(REFIID iid, void **ppvObject)
    {
        if (iid == IID_ITTAPIEventNotification)
        {
            AddRef();
            *ppvObject = (void *)this;
            return S_OK;
        }

        if (iid == IID_IUnknown)
        {
            AddRef();
            *ppvObject = (void *)this;
            return S_OK;
        }

        return E_NOINTERFACE;
    }

    //
    // 计数器
    //
    ULONG STDMETHODCALLTYPE AddRef()
    {
        ULONG l = InterlockedIncrement(&m_dwRefCount);
        return l;
    }
    
	ULONG STDMETHODCALLTYPE Release()
    {
        ULONG l = InterlockedDecrement(&m_dwRefCount);

        if ( 0 == l)
        {
            delete this;
        }
        
        return l;
    }
};

///////////////////////////////////////////////////////////////////////////////
// class CTapi
// 
// 功能:对 TAPI 功能进行定制,方便本程序使用
///////////////////////////////////////////////////////////////////////////////
class CTapi
{
public:
	//////////////////////////////////////////////////////////
	// 成员变量
	//////////////////////////////////////////////////////////

	ITTAPI *                m_pTapi;			// TAPI object

	ITAddress*				m_pAddress;			// Address object

	ITBasicCallControl *    m_pCall;			// Call object

	BOOL                    m_AutoAnswer;		// 是否自动应答标志

	ITTerminal              *m_pPlayFileTerm;	// 播放文件终端

	ITTerminal				*m_pRecordFileTerm;	// 录音文件终端

	ULONG                   m_Advise;			// 用于取消注册事件

	HWND					m_hWnd;				// UI 线程句柄

	int						m_dwMessages;		// 收到消息数

	int						m_Version;			// 当前操作系统的版本 0:win2000以下,1:win2000,2:winXP

	CString					m_WelcomeFileName;		// 当前要播放的音频文件名

	CString					m_RecFileName;		// 录音文件主文件名(将来在后面加上序号)

	CString					m_RecFileExt;		// 录音文件扩展名

	//////////////////////////////////////////////////////////
	// 成员函数
	//////////////////////////////////////////////////////////
	CTapi();
	~CTapi();

	// 初始化 TAPI
	HRESULT InitializeTapi();

	// 关闭 TAPI
	void ShutdownTapi();

	// 在所有地址中寻找 Modem 的地址,并对其监听
	HRESULT ListenOnAddresses();

	//在给定地址上监听
	HRESULT ListenOnThisAddress(
						ITAddress * pAddress
					);

	// 验证当前 Address 是否支持给定的媒体类型
	BOOL AddressSupportsMediaType(
							ITAddress * pAddress,
							long        lMediaType
							);
	// 注册事件
	HRESULT RegisterTapiEventInterface(CTAPIEventNotification *pTAPIEventNotification);

	// 对给定地址呼叫
	HRESULT	MakeTheCall(
						IN DWORD dwAddressType,
						IN PWCHAR szAddressToCall
					);

	// 对给定的 Address 选择终端,仅用于呼叫
	HRESULT SelectTerminalsOnCall(
						ITAddress * pAddress,
						ITBasicCallControl * pCall
						);

	// 获得默认终端
	HRESULT GetTerminal(
				ITAddress   * pAddress,
				ITStream    * pStream,
				ITTerminal ** ppTerminal
			);


	// 为放音准备声音文件
	HRESULT PreparePlay(CString strFileName);
	
	// 把待播放的音频文件加入播放列表
	HRESULT PutPlayList(
				IN ITTerminal *pITTerminal, 
				IN BSTR bstrFileName);

	//应答电话
	HRESULT AnswerTheCall();

	//挂断电话
	HRESULT DisconnectTheCall();

	//释放本次通话所占资源
	void ReleaseTheCall();

	// 录音
	HRESULT StartRecord();

	// 创建并选择录音文件终端
	HRESULT CreateAndSelectFileRecordTerminal();

	// 检测输入媒体流 pITStream 是否具有给定方向
	HRESULT CheckStreamDir(
				IN ITStream* pITStream,
				IN TERMINAL_DIRECTION td);

	// 检测输入媒体流 pITStream 是否具有给定媒体类型
	HRESULT CheckStreamMT(
				IN ITStream* pITStream,
				IN long mt);

	// 判断输入 call 是否与 m_pCall 是同一个 call
	bool SameCall(ITCallStateEvent* pCallStateEvent);

	// 为 MediaEvent 事件创建终端
	HRESULT GetTerminalFromStreamEvent( 
				IN ITCallMediaEvent * pCallMediaEvent,
				OUT ITTerminal ** ppTerminal );
};

⌨️ 快捷键说明

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