升龙物业 老版本 ocx IPO, 加密狗 转值班电话

PredictionCallReq.cpp 4.2KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. #include "StdAfx.h"
  2. #include "PredictionCallReq.h"
  3. #include "ControlShell.h"
  4. #include "VirtualProxy.h"
  5. #include "ProxyShell.h"
  6. #include "MC.h"
  7. CPredictionCallReq::CPredictionCallReq(CProxyShell* pParent, CPduEntity& ReqPdu) : CReqBase(pParent, ReqPdu), m_CallFailedCause(CALL_FAILED_CAUSE_SUCCESS)
  8. {
  9. }
  10. CPredictionCallReq::~CPredictionCallReq(void)
  11. {
  12. }
  13. /*****************************************************************
  14. **【函数名称】 request
  15. **【函数功能】 发出请求(命令方式)
  16. **【参数】
  17. **【返回值】
  18. ****************************************************************/
  19. bool CPredictionCallReq::request( void )
  20. {
  21. // 保存主被叫号码
  22. m_CallerNum = m_ReqPdu.GetDataString(3);
  23. m_CalleeNum = m_ReqPdu.GetDataString(2);
  24. int SipAccountId;
  25. CVirtualProxy* pHostLine = m_pParent->setEnv4PredictionCall(m_CallerNum, m_CalleeNum, SipAccountId);
  26. if(pHostLine == NULL)
  27. {
  28. LOGGER(LOG_CLASS_BUSI, LOG_LEVEL_WARNING, _T("{LineReq}: 执行预测呼叫请求失败, 无空闲中继线路, DestNum = %s"), m_CalleeNum);
  29. return false;
  30. } // end if
  31. attachHostLine(pHostLine);
  32. // 通知启动日志
  33. LOGGER(LOG_CLASS_BUSI, LOG_LEVEL_NORMAL, _T("{LineReq}: 中继[%lu]预测呼叫, DestNum = %s"), m_pHostLine->lineId(), m_CalleeNum);
  34. // 启动呼叫
  35. return CMC::GetInstance().dial(pHostLine->devId(), m_CalleeNum, m_CallerNum, SipAccountId);
  36. }
  37. /*****************************************************************
  38. **【函数名称】 hangUp
  39. **【函数功能】 操作中挂机(命令方式)
  40. **【参数】
  41. **【返回值】
  42. ****************************************************************/
  43. bool CPredictionCallReq::hangUp( long InstanceHangUp )
  44. {
  45. // 外呼取消日志
  46. LOGGER(LOG_CLASS_BUSI, LOG_LEVEL_NORMAL, _T("{LineReq}: 中继[%lu]预测呼叫因挂机取消, DestNum = %s"),
  47. m_pHostLine->lineId(), m_CalleeNum);
  48. m_InstanceCancel = InstanceHangUp;
  49. return CMC::GetInstance().dropCall(m_pHostLine->devId(), false);
  50. }
  51. /*****************************************************************
  52. **【函数名称】 end
  53. **【函数功能】 操作完成
  54. **【参数】 bIsSucceed 操作是否成功
  55. lpData 随路数据
  56. **【返回值】
  57. ****************************************************************/
  58. void CPredictionCallReq::end( bool IsSucceed, LPCTSTR lpData )
  59. {
  60. if(IsSucceed)
  61. {
  62. LOGGER(LOG_CLASS_BUSI, LOG_LEVEL_NORMAL, _T("{LineReq}: 中继[%lu]预测呼叫成功, DestNum = %s"),
  63. m_pHostLine->lineId(), m_CalleeNum);
  64. }
  65. else
  66. {
  67. LOGGER(LOG_CLASS_BUSI, LOG_LEVEL_WARNING, _T("{LineReq}: 中继[%lu]预测呼叫失败, DestNum = %s"),
  68. m_pHostLine->lineId(), m_CalleeNum);
  69. } // end if
  70. TCHAR CallFailedCause[2] = { 0 };
  71. CallFailedCause[0] = (TCHAR)m_CallFailedCause;
  72. // 返回执行结果
  73. if(m_InstanceCancel != 0)
  74. m_pParent->notifyReqResult(m_ReqPdu, m_InstanceCancel, !IsSucceed, CallFailedCause);
  75. m_pParent->onLineReqEnd(this, IsSucceed, CallFailedCause);
  76. }
  77. /*****************************************************************
  78. **【函数名称】 onDevChEvent
  79. **【函数功能】 线路向上层发送的设备主动事件
  80. **【参数】 pEventLine 触发事件的线路
  81. EvtType 事件类型
  82. lpContent 事件内容
  83. **【返回值】
  84. *****************************************************************/
  85. void CPredictionCallReq::onDevChEvent( CVirtualProxy* pEventLine, DEV_CH_EVT_TYPE EvtType, LPCTSTR lpContent )
  86. {
  87. if(EvtType == DEV_CH_EVT_CALL_FAILD_CAUSE)
  88. {
  89. m_CallFailedCause = (int)lpContent;
  90. }
  91. }
  92. /*****************************************************************
  93. **【函数名称】 onLineStateChanged
  94. **【函数功能】 线路状态变化事件响应接口
  95. **【参数】 pEventLine 状态变化的线路实体指针
  96. LineState 线路当前状态
  97. Call 主呼叫ID
  98. SubCall 子呼叫ID
  99. lpCallerNum 主叫号码
  100. lpCalleeNum 被叫号码
  101. **【返回值】
  102. ****************************************************************/
  103. void CPredictionCallReq::onLineStateChanged( CVirtualProxy* pEventLine, VIRTUAL_LINE_STATE LineState, long Call, long SubCall, LPCTSTR lpCallerNum, LPCTSTR lpCalleeNum )
  104. {
  105. // 根据线路状态进行处理
  106. switch(LineState)
  107. {
  108. case VIRTUAL_LINE_STATE_FREE: // 呼叫失败
  109. {
  110. end(false, NULL);
  111. }
  112. break;
  113. case VIRTUAL_LINE_STATE_RING_BACK: // 呼出振铃
  114. {
  115. _notifyOpProcess(m_pHostLine->lineId(), m_pHostLine->lineId(), DEV_RES_TYPE_TRUNK, lpCallerNum, lpCalleeNum);
  116. }
  117. break;
  118. case VIRTUAL_LINE_STATE_TALKING: // 呼叫成功
  119. {
  120. end(true, NULL);
  121. }
  122. break;
  123. } // end switch
  124. }