#include "OpSendDtmf.h" #include "VirtualChan.h" #include "FsProxy.h" #include "OperationReactor.h" COpSendDtmf::COpSendDtmf(COperationReactor * pParent, long Instance) :COperation(pParent, Instance) { } COpSendDtmf::~COpSendDtmf(void) { } bool COpSendDtmf::attachHostChan(VirtualChan * pChan) { m_pHostChan = pChan; return true; } void COpSendDtmf::detachHostChan(void) { m_pHostChan = NULL; } bool COpSendDtmf::start(LineOpParam * pParam) { if (m_pHostChan == NULL || m_pHostChan->state() != CHAN_LOGIC_STATE_TALKING) { LOG_ERROR("通道[%s]发送[%s]按键失败,未在通话中", pParam->szParam1.c_str(), pParam->szParam2.c_str()); return false; } m_dtmf = pParam->szDtmf; LOG_INFO("{COpSendDtmf}: 通道[%s]执行通道[%lu]发送按键, DTMF = %s", pParam->szParam1.c_str(), m_pHostChan->no(), m_dtmf.c_str()); return CFsProxy::GetInstance().sendDtmf(uniqueId(), m_pHostChan->chanId(), m_dtmf); } void COpSendDtmf::onBackgroudJobDone(PBG_JOB_NOTIFY pNotify) { if (pNotify->JobBody.find(ESL_JOB_DONE_RES_FAILED) == std::string::npos) _end(true); else _end(false); } void COpSendDtmf::_end(bool IsSucceed) { if (IsSucceed) { LOG_INFO("{COpSendDtmf}: 线路[%ld][%lu]发送按键成功, DTMF = %s", m_Instance, m_pHostChan->no(), m_dtmf.c_str()); } else { LOG_ERROR("{COpSendDtmf}: 线路[%ld][%lu]发送按键失败, DTMF = %s", m_Instance, m_pHostChan->no(), m_dtmf.c_str()); } // 返回执行结果 if (m_InstanceCancel != FS_LINK_INSTANCE_INVALID) m_pParent->onOpResult(m_InstanceCancel, !IsSucceed); m_pParent->onOpResult(m_Instance, this, IsSucceed, std::to_string(m_Instance)); }