#include "stdafx.h" #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(CVirtualChan * 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) { return false; } m_dtmf.Format("%s",pParam->szParam4); LOGGER(LOG_LEVEL_NORMAL, _T("{COpSendDtmf}: 通道[%lu]执行通道[%lu]发送按键, DTMF = %s"), pParam->nParam1,m_pHostChan->no(), m_dtmf); return CFsProxy::GetInstance().sendDtmf(uniqueId(), m_pHostChan->chanId(), m_dtmf); } void COpSendDtmf::onBackgroudJobDone(PBG_JOB_NOTIFY pNotify) { if (strstr(pNotify->JobBody, ESL_JOB_DONE_RES_FAILED) == NULL) _end(true); else _end(false); } void COpSendDtmf::_end(bool IsSucceed) { if (IsSucceed) { LOGGER(LOG_LEVEL_NORMAL, _T("{COpSendDtmf}: 线路[%lu]发送按键成功, DTMF = %s"), m_pHostChan->no(), m_dtmf); } else { LOGGER(LOG_LEVEL_WARNING, _T("{COpSendDtmf}: 线路[%lu]发送按键失败, DTMF = %s"), m_pHostChan->no(), m_dtmf); } // 返回执行结果 if (m_InstanceCancel != FS_LINK_INSTANCE_INVALID) m_pParent->onOpResult(m_InstanceCancel, !IsSucceed); m_pParent->onOpResult(m_Instance, this, IsSucceed); }