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

TapiOpInstead.cpp 5.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203
  1. #include "StdAfx.h"
  2. #include "TapiOpInstead.h"
  3. #include "LineOpExec.h"
  4. #include "TapiLine.h"
  5. #include "DevControl.h"
  6. CTapiOpInstead::CTapiOpInstead(LONG Instance) : CTapiOpBase(Instance), m_PendingCall(NULL), m_Step(0)
  7. {
  8. }
  9. CTapiOpInstead::~CTapiOpInstead(void)
  10. {
  11. }
  12. /*****************************************************************
  13. **【函数名称】 start
  14. **【函数功能】 操作启动(命令方式)
  15. **【参数】 pParam 操作启动参数
  16. **【返回值】
  17. ****************************************************************/
  18. bool CTapiOpInstead::start( LineOpParam* pParam )
  19. {
  20. // 校验状态
  21. if((m_pAssistLine->status() & INNER_STATE_ALERTING) == 0)
  22. return false;
  23. // 通知启动日志
  24. CDevControl::GetInstance().onEventLog(LOG_LEVEL_NORMAL, _T("{OP_Instead}: Exten[%s]执行代接, DestNum = %s"), m_pHostLine->extenID(), m_pAssistLine->extenID());
  25. // 如果主控线路为摘机拨号状态
  26. m_PendingCall = m_pAssistLine->activeCall();
  27. HCALL hCall = m_pHostLine->activeCall();
  28. if(hCall != NULL)
  29. {
  30. m_Step = 1;
  31. m_pHostLine->lineDropCall(hCall);
  32. }
  33. else
  34. {
  35. m_Step = 2;
  36. return m_pAssistLine->lineRedirectCall(m_PendingCall, m_pHostLine->extenID());
  37. } // end if
  38. return true;
  39. }
  40. /*****************************************************************
  41. **【函数名称】 cancel
  42. **【函数功能】 操作取消(命令方式)
  43. **【参数】
  44. **【返回值】
  45. ****************************************************************/
  46. bool CTapiOpInstead::cancel( LONG InstanceCancel )
  47. {
  48. return false;
  49. }
  50. /*****************************************************************
  51. **【函数名称】 end
  52. **【函数功能】 操作完成
  53. **【参数】 IsSucceed 操作是否成功
  54. **【返回值】
  55. ****************************************************************/
  56. void CTapiOpInstead::end( bool IsSucceed )
  57. {
  58. if(IsSucceed)
  59. {
  60. CDevControl::GetInstance().onEventLog(LOG_LEVEL_NORMAL, _T("{OP_Instead}: Exten[%s]代接成功, DestNum = %s"), m_pHostLine->extenID(), m_pAssistLine->extenID());
  61. }
  62. else
  63. {
  64. CDevControl::GetInstance().onEventLog(LOG_LEVEL_WARNING, _T("{OP_Instead}: Exten[%s]代接失败, DestNum = %s"), m_pHostLine->extenID(), m_pAssistLine->extenID());
  65. } // end if
  66. // 返回执行结果
  67. CLineOpExec::GetInstance().onTapiOpResult(m_Instance, this, IsSucceed);
  68. }
  69. /*****************************************************************
  70. **【函数名称】 onReply
  71. **【函数功能】 线路操作异步响应事件
  72. **【参数】 pEventLine 触发事件的线路
  73. RequestID
  74. Result
  75. **【返回值】
  76. ****************************************************************/
  77. void CTapiOpInstead::onReply( CTapiLine* pEventLine, LONG RequestID, HRESULT Result )
  78. {
  79. switch(m_Step)
  80. {
  81. case 1: // 正在挂断主控线路呼叫
  82. if(pEventLine == m_pHostLine && Result != S_OK)
  83. {
  84. end(false);
  85. } // end if
  86. break;
  87. case 2: // 正在执行呼叫重定向
  88. if(pEventLine == m_pAssistLine && Result != S_OK)
  89. {
  90. end(false);
  91. } // end if
  92. break;
  93. } // end switch
  94. }
  95. /*****************************************************************
  96. **【函数名称】 onCallState
  97. **【函数功能】 呼叫状态事件
  98. **【参数】 pEventLine 触发事件的线路
  99. CallId 触发事件的呼叫句柄
  100. CallState 呼叫基本状态
  101. CallStateDetail 呼叫明细状态
  102. **【返回值】
  103. ****************************************************************/
  104. void CTapiOpInstead::onCallState( CTapiLine* pEventLine, HCALL CallId, DWORD CallState, DWORD CallStateDetail )
  105. {
  106. // 关联线路状态修正
  107. if(pEventLine == m_pAssistLine && (CallState & LINECALLSTATE_DISCONNECTED))
  108. {
  109. m_pAssistLine->redoCallStatus(CallId, CallState, CallStateDetail);
  110. } // end if
  111. // 操作步骤处理
  112. switch(m_Step)
  113. {
  114. case 1: // 正在挂断主控线路上摘机呼叫
  115. {
  116. if((CallState & LINECALLSTATE_IDLE) && pEventLine == m_pHostLine)
  117. {
  118. m_Step = 2;
  119. if(!m_pAssistLine->lineRedirectCall(m_PendingCall, m_pHostLine->extenID()))
  120. end(false);
  121. } // end if
  122. }
  123. break;
  124. case 2: // 正在等待摘机
  125. {
  126. if((CallState & LINECALLSTATE_OFFERING) && pEventLine == m_pHostLine)
  127. {
  128. m_Step = 3;
  129. m_pHostLine->lineAnswerCall(CallId); // 默认执行一次应答呼叫操作
  130. } // end if
  131. }
  132. break;
  133. case 3:
  134. {
  135. if((CallState & LINECALLSTATE_CONNECTED) && pEventLine == m_pHostLine)
  136. {
  137. end(true);
  138. return;
  139. } // end if
  140. }
  141. break;
  142. } // end switch
  143. // 在任意步骤下如果原始呼叫释放
  144. if(pEventLine == m_pHostLine && CallId == m_PendingCall && (CallState & LINECALLSTATE_DISCONNECTED))
  145. {
  146. end(false);
  147. } // end if
  148. }
  149. /*****************************************************************
  150. **【函数名称】 onDevLinkEventS
  151. **【函数功能】 DevLink中S事件响应
  152. **【参数】 pEventLine 触发事件的线路
  153. pInfoS DevLink S事件内容
  154. **【返回值】
  155. ****************************************************************/
  156. void CTapiOpInstead::onDevLinkEventS( CTapiLine* pEventLine, DevLinkInfoS* pInfoS )
  157. {
  158. }
  159. /*****************************************************************
  160. **【函数名称】 onDevLineEventD
  161. **【函数功能】 DevLink中D事件响应
  162. **【参数】 pEventLine 触发事件的线路
  163. nDevLinkCallId DevLink事件CallId
  164. **【返回值】
  165. ****************************************************************/
  166. void CTapiOpInstead::onDevLinkEventD( CTapiLine* pEventLine, int DevLinkCallId )
  167. {
  168. }
  169. /*****************************************************************
  170. **【函数名称】 onDevLineEventA
  171. **【函数功能】 DevLink中A事件响应
  172. **【参数】 pEventLine 触发事件的线路
  173. nDevLinkCallId DevLink事件CallId
  174. **【返回值】
  175. ****************************************************************/
  176. void CTapiOpInstead::onDevLinkEventA( CTapiLine* pEventLine, int DevLinkCallId )
  177. {
  178. }