linux版本中间件

OpAutoCall.cpp 2.5KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. #include "OpAutoCall.h"
  2. #include "VirtualChan.h"
  3. #include "OperationReactor.h"
  4. #include "FsProxy.h"
  5. COpAutoCall::COpAutoCall(COperationReactor * pParent, long Instance) : COperation(pParent, Instance)
  6. {
  7. }
  8. COpAutoCall::~COpAutoCall(void)
  9. {
  10. }
  11. bool COpAutoCall::start(LineOpParam * pParam)
  12. {
  13. // 保存主被叫号码
  14. m_CallerNum = pParam->szParam1; // 分机 主叫
  15. m_CalleeNum = pParam->szParam2; // 被叫
  16. m_CallerAgent = pParam->nParam1; // 分机对应的坐席
  17. int taskId = pParam->nParam3; // 任务id
  18. int callType = pParam->nParam2; // 自动外呼任务类型
  19. // 启动日志
  20. LOG_INFO("{OpAutoCall}: 执行自动外呼, AgentID = %s, CallerNum = %s, CalleeNum = %s", m_CallerAgent.c_str(), m_CallerNum.c_str(), m_CalleeNum.c_str());
  21. return CFsProxy::GetInstance().AutoCall(uniqueId() , m_CallerNum, m_CalleeNum, callType, taskId);
  22. }
  23. bool COpAutoCall::hangup(long InstanceHangup)
  24. {
  25. // 外呼取消日志
  26. LOG_INFO("{OpAutoCall}: 中继自动呼叫中挂机, TrunkNo = %lu, DestNum = %s", m_pHostChan->no(), m_CalleeNum.c_str());
  27. if (m_pHostChan == nullptr)
  28. return false;
  29. m_InstanceCancel = InstanceHangup;
  30. return CFsProxy::GetInstance().kill(uniqueId(), m_pHostChan);
  31. }
  32. void COpAutoCall::onBackgroudJobDone(PBG_JOB_NOTIFY pNotify)
  33. {
  34. if (pNotify->JobCmd == ESL_CMD_MAKE_CALL)
  35. {
  36. if(pNotify->JobBody.find(ESL_JOB_DONE_RES_OK) ==string::npos)
  37. _end(false);
  38. }
  39. }
  40. //void COpAutoCall::onAssoChanStateUpdated(VirtualChan * pAssoChan)
  41. //{
  42. // if (m_pHostChan == nullptr)
  43. // {
  44. // attachHostChan(pAssoChan);
  45. // onHostChanStateUpdated(pAssoChan);
  46. // }
  47. //}
  48. void COpAutoCall::onHostChanStateUpdated(VirtualChan * pHostChan)
  49. {
  50. switch ((int)pHostChan->state())
  51. {
  52. case CHAN_LOGIC_STATE_RING_BACK:
  53. m_pParent->onOpProcess(m_Instance, pHostChan->no(), pHostChan->no(), pHostChan->type(), pHostChan->callerNum(), pHostChan->calleeNum());
  54. break;
  55. case CHAN_LOGIC_STATE_STANDBY:
  56. _end(true);
  57. break;
  58. case CHAN_LOGIC_STATE_FREE:
  59. _end(false);
  60. break;
  61. }
  62. }
  63. void COpAutoCall::_end(bool IsSucceed)
  64. {
  65. uint32_t TrunkNo = 0;
  66. if (m_pHostChan != nullptr)
  67. TrunkNo = m_pHostChan->no();
  68. if (IsSucceed)
  69. {
  70. LOG_INFO("{OpAutoCall}: 中继自动外呼成功, TrunkNo = %lu, DestNum = %s", TrunkNo, m_CalleeNum.c_str());
  71. }
  72. else
  73. {
  74. LOG_WARN("{OpAutoCall}: 中继自动外呼失败, TrunkNo = %lu, DestNum = %s", TrunkNo, m_CalleeNum.c_str());
  75. }
  76. // 返回执行结果
  77. if (m_InstanceCancel != FS_LINK_INSTANCE_INVALID)
  78. m_pParent->onOpResult(m_InstanceCancel, !IsSucceed);
  79. m_pParent->onOpResult(m_Instance, this, IsSucceed, std::to_string(TrunkNo));
  80. }