| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125 |
- /*************************************************************************
- 【文件名】 TapiLine.h
- 【功能模块和目的】 TAPI线路类头文件
- 【开发者及日期】 郑石诺 2016/03/23
- 【版本】 V1.0.0
- 【版权信息】 Copyright (C)2016 河南华谊网络科技有限公司
- 【更改记录】
- *************************************************************************/
- #pragma once
- #include <Tapi.h>
- class CTapiOpBase;
- /*************************************************************************
- 【类名】 CTapiLine
- 【功能】
- 【接口说明】 TAPI线路类
- 【开发者及日期】 郑石诺 2016/03/23
- 【版本】 V1.0.0
- 【版权信息】 Copyright (C)2016 河南华谊网络科技有限公司
- 【更改记录】
- *************************************************************************/
- class CTapiLine
- {
- public:
- CTapiLine(DWORD DevID, HLINE Handle, DWORD ApiVersion, CString ExtID, HLINEAPP LineApp);
- virtual ~CTapiLine(void);
- // 关联属性
- const CString& extenID(void) const { return m_ExtenID; }
- HCALL activeCall(void) const { return m_ActiveCall; }
- HCALL& heldCall(void) { return m_HeldCall; }
- HCALL heldCall(void) const { return m_HeldCall; }
- CTapiOpBase*& currTapiOp(void) { return m_pCurrTapiOp; }
- CTapiOpBase* currTapiOp(void) const { return m_pCurrTapiOp; }
- int status(void) const { return m_LineStatus; }
- bool& listenerFlag(void) { return m_IsListener; }
- bool listenerFlag(void) const { return m_IsListener; }
- bool isFree(void) const { return (m_LineStatus == INNER_STATE_FREE && m_pCurrTapiOp == NULL); } // 线路是否空闲
- // 相关操作
- virtual void redoCallStatus(HCALL CallId, DWORD CallState, DWORD CallStateDetail) = 0; // 强制重新处理线路状态
- virtual void setDevLinkHeldId(const int DevLinkCallId) = 0;
- virtual void setDevLinkCallId(const int DevLinkCallId) = 0;
- DWORD getCallStatus(const HCALL CallId); // 读取呼叫信息
- bool isAssoDevLinkCallId(int DevLinkCallId); // DevLinkCallId是否与当前线路有关联
- // TAPI线路事件
- void onTapiEvent(DWORD nDevice, DWORD nMsg, DWORD Param1, DWORD Param2, DWORD Param3); // TAPI线路事件入口函数
- virtual void regist(void) = 0; // 注册线路
- // DevLink线路事件
- virtual void onDevLinkEventS(DevLinkInfoS* pInfoS); // DEV Link S 事件响应
- virtual void onDevLinkEventA(int DevLinkCallId); // DEV Link A 事件响应
- virtual void onDevLinkEventD(int DevLinkCallId); // DEV Link D 事件响应
- // 电话控制
- bool lineReopen(void); // 线路重新打开
- bool lineMakeCall(LPCTSTR pszDest, HCALL& WaitingCall); // 线路外呼
- bool lineAnswerCall(HCALL CallId); // 应答呼叫
- bool lineDropCall(HCALL CallId); // 终止呼叫
- bool lineHold(HCALL CallId); // 保持呼叫
- bool lineTakeBack(HCALL CallId); // 接回呼叫
- bool lineListen(LPCTSTR pszDest); // 监听
- bool lineDial(HCALL CallId, LPCTSTR pszDest); // 呼叫
- bool lineRedirectCall(HCALL CallId, LPCTSTR pszDest); // 重定向呼叫
- bool lineInsert(LPCTSTR pszDest); // 强插
- bool linePickupCall(LPHCALL lphWaitingCall, LPCTSTR pszDest); // 代接
- bool lineSetupTransfer(LPHCALL lphTransferCall); // 启动转移
- bool lineCompleteTransfer(HCALL HeldCall, HCALL TransferCall); // 完成转移
- bool lineCompleteConference(HCALL HeldCall, HCALL ConferenceCall); // 完成三方会议
- bool lineGenerateDigit(HCALL CallId, LPCTSTR pszDigits); // 生成按键
- bool lineReset(void); // 线路重置
- bool linePark(HCALL CallId, LPCTSTR pszAddress); // 呼叫停靠
- bool lineUnPark(HCALL& CallId, LPCTSTR pszAddress); // 停靠接回
- protected:
- virtual void _procDevLinkEventS(DevLinkInfoS* pInfoS) = 0; // DevLink S事件后续处理
- virtual void _procDevLinkEventD(int DevLinkCallId) = 0; // DevLink D事件后续处理
- virtual void _procLineInitStatus(HCALL CallId, DWORD CallState, DWORD CallStateDetail, DWORD CallPrivilege) = 0; // 初始化线路状态处理
- INNER_STATE _mapTapiCallState(DWORD CallState); // 映射呼叫状态到线路状态
- private:
- // 通用事件响应操作
- void __onReply(LONG RequestID, HRESULT Result); // 线路操作异步返回事件
- void __onNewCall(DWORD AddressID, HCALL CallId, DWORD CallPrivilege); // 新建呼叫事件响应
- void __onCallState(HCALL CallId, DWORD CallState, DWORD CallStateDetail, DWORD CallPrivilege); // 呼叫状态变化事件响应
- void __onCallInfo(HCALL CallId, DWORD CallInfoState); // 呼叫信息变化事件响应
- // 线路内部操作(TAPI)
- HRESULT __loopLineGetCallInfo(HCALL CallId, LINECALLINFO* &pCallInfo); // 获取呼叫信息
- HRESULT __loopLineGetCallStatus(HCALL CallId, DWORD& CallStatus); // 获取呼叫状态
- // 其它操作
- void __updateHCall(HCALL CallId, DWORD CallState, DWORD CallStateDetail); // 更新相关呼叫句柄
- protected:
- const static DWORD LINE_DEV_STATE_ALL = 0x01FFFFFF; // 线路状态事件过滤标志
- const static DWORD LINE_ADDRESS_STATE_ALL = 0x000001FF; // 线路地址状态事件过滤标志
- // 设备参数
- const DWORD m_DevID; // 线路的设备ID
- const DWORD m_ApiVersion; // 线路API版本号
- const CString m_ExtenID; // 线路分机号
- const HLINEAPP m_LineApp; // TAPI主控应用句柄
- // 呼叫控制句柄
- HLINE m_Handle; // 线路控制句柄
- HCALL m_ActiveCall; // 当前的活动呼叫
- HCALL m_PendingCall; // 呼叫操作中待处理的呼叫
- HCALL m_HeldCall; // 当前被保持的呼叫
- int m_DevLinkCallId; // 当前线路关联的活动 DevLinkCallId ( -1 表示没有关联呼叫, -2 表示暂时不接收DevLink事件 )
- int m_DevLinkHeldId; // 当前线路关联的保持 DevLinkCallId
- bool m_IsListener; // 线路是否为监听线路
- // 控制参数
- int m_LineStatus; // 线路当前状态
- CTapiOpBase*m_pCurrTapiOp; // 当前正在进行的相关操作
- time_t m_InitTime; // 线路初始化起始时间
- // 用于同步DevLink事件和Tapi事件的临界区
- CCriticalSection m_LockSection;
- };
|