中间件标准版5.1git,去除基础模块

TapiOpMakeCall.cpp 6.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228
  1. #include "StdAfx.h"
  2. #include "TapiOpMakeCall.h"
  3. #include "DevControl.h"
  4. #include "LineOpExec.h"
  5. #include "TapiLine.h"
  6. CTapiOpMakeCall::CTapiOpMakeCall(LONG Instance) : CTapiOpBase(Instance), m_WaitingCall(NULL)
  7. {
  8. ZeroMemory(&m_TmpInfoS, sizeof(DevLinkInfoS));
  9. }
  10. CTapiOpMakeCall::~CTapiOpMakeCall(void)
  11. {
  12. }
  13. /*****************************************************************
  14. **【函数名称】 start
  15. **【函数功能】 操作启动(命令方式)
  16. **【参数】 pParam 操作启动参数
  17. **【返回值】
  18. ****************************************************************/
  19. bool CTapiOpMakeCall::start( LineOpParam* pParam )
  20. {
  21. // 校验状态
  22. if((m_pHostLine->status() & INNER_STATE_FREE) == 0x00 &&
  23. (m_pHostLine->status() & INNER_STATE_INIT) == 0x00)
  24. {
  25. return false;
  26. } // end if
  27. // 保存被叫号码
  28. m_CalleeNum.Format(_T("%s"), pParam->szParam2);
  29. // 通知启动日志
  30. CDevControl::GetInstance().onEventLog(LOG_LEVEL_NORMAL, _T("{OP_Call}: Exten[%s]执行外呼, CalleeNum = %s"), m_pHostLine->extenID(), m_CalleeNum);
  31. // 调用线路外呼操作
  32. return m_pHostLine->lineMakeCall(m_CalleeNum, m_WaitingCall);
  33. }
  34. /*****************************************************************
  35. **【函数名称】 start
  36. **【函数功能】 操作启动(手动方式)
  37. **【参数】 pInfo 操作启动参数
  38. **【返回值】
  39. ****************************************************************/
  40. void CTapiOpMakeCall::start( DevLinkInfoS* pInfo )
  41. {
  42. // 通知设备外呼启动事件
  43. UINT ExtId = 0;
  44. sscanf_s(m_pHostLine->extenID(), _T("%lu"), &ExtId);
  45. CDevControl::GetInstance().onEventDevOperation(ExtId, DEV_OP_CALL_OUT, pInfo->szCallerNum, pInfo->szCalleeNum);
  46. }
  47. /*****************************************************************
  48. **【函数名称】 cancel
  49. **【函数功能】 操作取消(命令方式)
  50. **【参数】
  51. **【返回值】
  52. ****************************************************************/
  53. bool CTapiOpMakeCall::cancel( LONG InstanceCancel )
  54. {
  55. // 保存取消操作调用标识
  56. m_InstanceCancel = InstanceCancel;
  57. // 通知启动日志
  58. CDevControl::GetInstance().onEventLog(LOG_LEVEL_NORMAL, _T("{OP_Call}: Exten[%s]外呼取消,CalleeNum = %s"), m_pHostLine->extenID(), m_CalleeNum);
  59. // 调用线路挂机操作
  60. HCALL hDropCall = m_pHostLine->activeCall();
  61. return m_pHostLine->lineDropCall(hDropCall);
  62. }
  63. /*****************************************************************
  64. **【函数名称】 end
  65. **【函数功能】 操作完成
  66. **【参数】 IsSucceed 操作是否成功
  67. **【返回值】
  68. ****************************************************************/
  69. void CTapiOpMakeCall::end( bool IsSucceed )
  70. {
  71. // 系统日志
  72. if(IsSucceed)
  73. {
  74. CDevControl::GetInstance().onEventLog(LOG_LEVEL_NORMAL, _T("{OP_Call}: Exten[%s]外呼成功, CalleeNum = %s"), m_pHostLine->extenID(), m_CalleeNum);
  75. }
  76. else
  77. {
  78. CDevControl::GetInstance().onEventLog(LOG_LEVEL_WARNING, _T("{OP_Call}: Exten[%s]外呼失败, CalleeNum = %s"), m_pHostLine->extenID(), m_CalleeNum);
  79. } // end if
  80. // 返回执行结果
  81. if(m_InstanceCancel != CONST_TAPI_OP_INSTANCE_INVALID)
  82. {
  83. CDevControl::GetInstance().onEventOpResult(m_InstanceCancel, !IsSucceed);
  84. } // end if
  85. CLineOpExec::GetInstance().onTapiOpResult(m_Instance, this, IsSucceed);
  86. }
  87. /*****************************************************************
  88. **【函数名称】 setAssoInfo
  89. **【函数功能】 设置关联信息
  90. **【参数】 Info 信息内容
  91. **【返回值】
  92. ****************************************************************/
  93. void CTapiOpMakeCall::setAssoInfo( LONG Info )
  94. {
  95. // 保存调用标识
  96. m_Instance = Info;
  97. if(m_TmpInfoS.nDevLinkCallId != 0)
  98. {
  99. // 通知设备进展
  100. _notifyOpProcess(&m_TmpInfoS);
  101. }
  102. }
  103. /*****************************************************************
  104. **【函数名称】 OnReply
  105. **【函数功能】 线路操作异步响应事件
  106. **【参数】 pEventLine 触发事件的线路
  107. nRequestID
  108. hResult
  109. **【返回值】
  110. ****************************************************************/
  111. void CTapiOpMakeCall::onReply( CTapiLine* pEventLine, LONG RequestID, HRESULT Result )
  112. {
  113. if(Result != S_OK)
  114. end(false);
  115. }
  116. /*****************************************************************
  117. **【函数名称】 onCallState
  118. **【函数功能】 呼叫状态事件
  119. **【参数】 pEventLine 触发事件的线路
  120. CallId 触发事件的呼叫句柄
  121. CallState 呼叫基本状态
  122. CallStateDetail 呼叫明细状态
  123. **【返回值】
  124. ****************************************************************/
  125. void CTapiOpMakeCall::onCallState( CTapiLine* pEventLine, HCALL CallId, DWORD CallState, DWORD CallStateDetail )
  126. {
  127. if(CallId != m_WaitingCall) return;
  128. if(CallState & LINECALLSTATE_DISCONNECTED) // 呼叫失败
  129. {
  130. end(false);
  131. }
  132. else if(CallState & LINECALLSTATE_BUSY) // 被叫忙
  133. {
  134. // 主叫线路释放
  135. m_pHostLine->lineDropCall(m_WaitingCall);
  136. end(false);
  137. }
  138. }
  139. /*****************************************************************
  140. **【函数名称】 onDevLinkEventS
  141. **【函数功能】 DevLink中S事件响应
  142. **【参数】 pEventLine 触发事件的线路
  143. pInfoS DevLink S事件内容
  144. **【返回值】
  145. ****************************************************************/
  146. void CTapiOpMakeCall::onDevLinkEventS( CTapiLine* pEventLine, DevLinkInfoS* pInfoS )
  147. {
  148. // 呼出振铃
  149. switch(pInfoS->nResStatus)
  150. {
  151. case INNER_STATE_RING_BACK: // 呼出振铃
  152. {
  153. // 保存呼叫信息
  154. m_CalleeNum = pInfoS->szCalleeNum;
  155. // 获取呼叫句柄
  156. m_WaitingCall = m_pHostLine->activeCall();
  157. // 通知启动日志
  158. CDevControl::GetInstance().onEventLog(LOG_LEVEL_NORMAL, _T("{OP_Call}: Exten[%s]执行话机直呼, CalleeNum = %s"), m_pHostLine->extenID(), m_CalleeNum);
  159. if(m_Instance != CONST_TAPI_OP_INSTANCE_INVALID)
  160. {
  161. // 通知设备进展
  162. _notifyOpProcess(pInfoS);
  163. }
  164. else
  165. {
  166. memcpy(&m_TmpInfoS, pInfoS, sizeof(DevLinkInfoS));
  167. }
  168. }
  169. break;
  170. case INNER_STATE_TALKING: // 通话中
  171. {
  172. end(true);
  173. return;
  174. }
  175. break;
  176. } // end switch
  177. }
  178. /*****************************************************************
  179. **【函数名称】 onDevLinkEventD
  180. **【函数功能】 DevLink中D事件响应
  181. **【参数】 pEventLine 触发事件的线路
  182. DevLinkCallId DevLink事件CallId
  183. **【返回值】
  184. ****************************************************************/
  185. void CTapiOpMakeCall::onDevLinkEventD( CTapiLine* pEventLine, int DevLinkCallId )
  186. {
  187. if(pEventLine == m_pHostLine)
  188. end(false);
  189. }
  190. /*****************************************************************
  191. **【函数名称】 onDevLineEventA
  192. **【函数功能】 DevLink中A事件响应
  193. **【参数】 pEventLine 触发事件的线路
  194. DevLinkCallId DevLink事件CallId
  195. **【返回值】
  196. ****************************************************************/
  197. void CTapiOpMakeCall::onDevLinkEventA( CTapiLine* pEventLine, int DevLinkCallId )
  198. {
  199. }