MiddleWares_YiHe 郑州颐和医院随访系统中间件

TapiLine.h 5.5KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. /*************************************************************************
  2. 【文件名】 TapiLine.h
  3. 【功能模块和目的】 TAPI线路类头文件
  4. 【开发者及日期】 郑石诺 2016/03/23
  5. 【版本】 V1.0.0
  6. 【版权信息】 Copyright (C)2016 河南华谊网络科技有限公司
  7. 【更改记录】
  8. *************************************************************************/
  9. #pragma once
  10. #include <Tapi.h>
  11. class CTapiOpBase;
  12. /*************************************************************************
  13. 【类名】 CTapiLine
  14. 【功能】
  15. 【接口说明】 TAPI线路类
  16. 【开发者及日期】 郑石诺 2016/03/23
  17. 【版本】 V1.0.0
  18. 【版权信息】 Copyright (C)2016 河南华谊网络科技有限公司
  19. 【更改记录】
  20. *************************************************************************/
  21. class CTapiLine
  22. {
  23. public:
  24. CTapiLine(DWORD DevID, HLINE Handle, DWORD ApiVersion, CString ExtID, HLINEAPP LineApp);
  25. virtual ~CTapiLine(void);
  26. // 关联属性
  27. const CString& extenID(void) const { return m_ExtenID; }
  28. HCALL activeCall(void) const { return m_ActiveCall; }
  29. HCALL& heldCall(void) { return m_HeldCall; }
  30. HCALL heldCall(void) const { return m_HeldCall; }
  31. CTapiOpBase*& currTapiOp(void) { return m_pCurrTapiOp; }
  32. CTapiOpBase* currTapiOp(void) const { return m_pCurrTapiOp; }
  33. int status(void) const { return m_LineStatus; }
  34. bool& listenerFlag(void) { return m_IsListener; }
  35. bool listenerFlag(void) const { return m_IsListener; }
  36. bool isFree(void) const { return (m_LineStatus == INNER_STATE_FREE && m_pCurrTapiOp == NULL); } // 线路是否空闲
  37. // 相关操作
  38. virtual void redoCallStatus(HCALL CallId, DWORD CallState, DWORD CallStateDetail) = 0; // 强制重新处理线路状态
  39. virtual void setDevLinkHeldId(const int DevLinkCallId) = 0;
  40. virtual void setDevLinkCallId(const int DevLinkCallId) = 0;
  41. DWORD getCallStatus(const HCALL CallId); // 读取呼叫信息
  42. bool isAssoDevLinkCallId(int DevLinkCallId); // DevLinkCallId是否与当前线路有关联
  43. // TAPI线路事件
  44. void onTapiEvent(DWORD nDevice, DWORD nMsg, DWORD Param1, DWORD Param2, DWORD Param3); // TAPI线路事件入口函数
  45. virtual void regist(void) = 0; // 注册线路
  46. // DevLink线路事件
  47. virtual void onDevLinkEventS(DevLinkInfoS* pInfoS); // DEV Link S 事件响应
  48. virtual void onDevLinkEventA(int DevLinkCallId); // DEV Link A 事件响应
  49. virtual void onDevLinkEventD(int DevLinkCallId); // DEV Link D 事件响应
  50. // 电话控制
  51. bool lineReopen(void); // 线路重新打开
  52. bool lineMakeCall(LPCTSTR pszDest, HCALL& WaitingCall); // 线路外呼
  53. bool lineAnswerCall(HCALL CallId); // 应答呼叫
  54. bool lineDropCall(HCALL CallId); // 终止呼叫
  55. bool lineHold(HCALL CallId); // 保持呼叫
  56. bool lineTakeBack(HCALL CallId); // 接回呼叫
  57. bool lineListen(LPCTSTR pszDest); // 监听
  58. bool lineDial(HCALL CallId, LPCTSTR pszDest); // 呼叫
  59. bool lineRedirectCall(HCALL CallId, LPCTSTR pszDest); // 重定向呼叫
  60. bool lineInsert(LPCTSTR pszDest); // 强插
  61. bool linePickupCall(LPHCALL lphWaitingCall, LPCTSTR pszDest); // 代接
  62. bool lineSetupTransfer(LPHCALL lphTransferCall); // 启动转移
  63. bool lineCompleteTransfer(HCALL HeldCall, HCALL TransferCall); // 完成转移
  64. bool lineCompleteConference(HCALL HeldCall, HCALL ConferenceCall); // 完成三方会议
  65. bool lineGenerateDigit(HCALL CallId, LPCTSTR pszDigits); // 生成按键
  66. bool lineReset(void); // 线路重置
  67. bool linePark(HCALL CallId, LPCTSTR pszAddress); // 呼叫停靠
  68. bool lineUnPark(HCALL& CallId, LPCTSTR pszAddress); // 停靠接回
  69. protected:
  70. virtual void _procDevLinkEventS(DevLinkInfoS* pInfoS) = 0; // DevLink S事件后续处理
  71. virtual void _procDevLinkEventD(int DevLinkCallId) = 0; // DevLink D事件后续处理
  72. virtual void _procLineInitStatus(HCALL CallId, DWORD CallState, DWORD CallStateDetail, DWORD CallPrivilege) = 0; // 初始化线路状态处理
  73. INNER_STATE _mapTapiCallState(DWORD CallState); // 映射呼叫状态到线路状态
  74. private:
  75. // 通用事件响应操作
  76. void __onReply(LONG RequestID, HRESULT Result); // 线路操作异步返回事件
  77. void __onNewCall(DWORD AddressID, HCALL CallId, DWORD CallPrivilege); // 新建呼叫事件响应
  78. void __onCallState(HCALL CallId, DWORD CallState, DWORD CallStateDetail, DWORD CallPrivilege); // 呼叫状态变化事件响应
  79. void __onCallInfo(HCALL CallId, DWORD CallInfoState); // 呼叫信息变化事件响应
  80. // 线路内部操作(TAPI)
  81. HRESULT __loopLineGetCallInfo(HCALL CallId, LINECALLINFO* &pCallInfo); // 获取呼叫信息
  82. HRESULT __loopLineGetCallStatus(HCALL CallId, DWORD& CallStatus); // 获取呼叫状态
  83. // 其它操作
  84. void __updateHCall(HCALL CallId, DWORD CallState, DWORD CallStateDetail); // 更新相关呼叫句柄
  85. protected:
  86. const static DWORD LINE_DEV_STATE_ALL = 0x01FFFFFF; // 线路状态事件过滤标志
  87. const static DWORD LINE_ADDRESS_STATE_ALL = 0x000001FF; // 线路地址状态事件过滤标志
  88. // 设备参数
  89. const DWORD m_DevID; // 线路的设备ID
  90. const DWORD m_ApiVersion; // 线路API版本号
  91. const CString m_ExtenID; // 线路分机号
  92. const HLINEAPP m_LineApp; // TAPI主控应用句柄
  93. // 呼叫控制句柄
  94. HLINE m_Handle; // 线路控制句柄
  95. HCALL m_ActiveCall; // 当前的活动呼叫
  96. HCALL m_PendingCall; // 呼叫操作中待处理的呼叫
  97. HCALL m_HeldCall; // 当前被保持的呼叫
  98. int m_DevLinkCallId; // 当前线路关联的活动 DevLinkCallId ( -1 表示没有关联呼叫, -2 表示暂时不接收DevLink事件 )
  99. int m_DevLinkHeldId; // 当前线路关联的保持 DevLinkCallId
  100. bool m_IsListener; // 线路是否为监听线路
  101. // 控制参数
  102. int m_LineStatus; // 线路当前状态
  103. CTapiOpBase*m_pCurrTapiOp; // 当前正在进行的相关操作
  104. time_t m_InitTime; // 线路初始化起始时间
  105. // 用于同步DevLink事件和Tapi事件的临界区
  106. CCriticalSection m_LockSection;
  107. };