linux版本中间件

OpSendDtmf.cpp 1.6KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. #include "OpSendDtmf.h"
  2. #include "VirtualChan.h"
  3. #include "FsProxy.h"
  4. #include "OperationReactor.h"
  5. COpSendDtmf::COpSendDtmf(COperationReactor * pParent, long Instance) :COperation(pParent, Instance)
  6. {
  7. }
  8. COpSendDtmf::~COpSendDtmf(void)
  9. {
  10. }
  11. bool COpSendDtmf::attachHostChan(VirtualChan * pChan)
  12. {
  13. m_pHostChan = pChan;
  14. return true;
  15. }
  16. void COpSendDtmf::detachHostChan(void)
  17. {
  18. m_pHostChan = NULL;
  19. }
  20. bool COpSendDtmf::start(LineOpParam * pParam)
  21. {
  22. if (m_pHostChan == NULL || m_pHostChan->state() != CHAN_LOGIC_STATE_TALKING)
  23. {
  24. LOG_ERROR("通道[%s]发送[%s]按键失败,未在通话中", pParam->szParam1.c_str(), pParam->szParam2.c_str());
  25. return false;
  26. }
  27. m_dtmf = pParam->szDtmf;
  28. LOG_INFO("{COpSendDtmf}: 通道[%s]执行通道[%lu]发送按键, DTMF = %s", pParam->szParam1.c_str(), m_pHostChan->no(), m_dtmf.c_str());
  29. return CFsProxy::GetInstance().sendDtmf(uniqueId(), m_pHostChan->chanId(), m_dtmf);
  30. }
  31. void COpSendDtmf::onBackgroudJobDone(PBG_JOB_NOTIFY pNotify)
  32. {
  33. if (pNotify->JobBody.find(ESL_JOB_DONE_RES_FAILED) == std::string::npos)
  34. _end(true);
  35. else
  36. _end(false);
  37. }
  38. void COpSendDtmf::_end(bool IsSucceed)
  39. {
  40. if (IsSucceed)
  41. {
  42. LOG_INFO("{COpSendDtmf}: 线路[%ld][%lu]发送按键成功, DTMF = %s", m_Instance, m_pHostChan->no(), m_dtmf.c_str());
  43. }
  44. else
  45. {
  46. LOG_ERROR("{COpSendDtmf}: 线路[%ld][%lu]发送按键失败, DTMF = %s", m_Instance, m_pHostChan->no(), m_dtmf.c_str());
  47. }
  48. // 返回执行结果
  49. if (m_InstanceCancel != FS_LINK_INSTANCE_INVALID)
  50. m_pParent->onOpResult(m_InstanceCancel, !IsSucceed);
  51. m_pParent->onOpResult(m_Instance, this, IsSucceed, std::to_string(m_Instance));
  52. }