#include "StdAfx.h" #include "OpRecord.h" #include "VirtualChan.h" #include "FsProxy.h" #include "OperationReactor.h" COpRecord::COpRecord(COperationReactor* pParent, LONG Instance) : COperation(pParent, Instance) { } COpRecord::~COpRecord(void) { } /***************************************************************** **【函数名称】 _end **【函数功能】 操作完成 **【参数】 IsSucceed 操作是否成功 lpData 随路数据 **【返回值】 ****************************************************************/ void COpRecord::_end( bool IsSucceed ) { if(IsSucceed) { LOGGER(LOG_LEVEL_NORMAL, _T("{OpRecord}: 通道[%lu]录音成功"), m_pHostChan->no()); } else { LOGGER(LOG_LEVEL_WARNING, _T("{OpRecord}: 通道[%lu]录音失败"), m_pHostChan->no()); } // 返回执行结果 if(m_InstanceCancel != FS_LINK_INSTANCE_INVALID) m_pParent->onOpResult(m_InstanceCancel, !IsSucceed); m_pParent->onOpResult(m_Instance, this, IsSucceed); } /***************************************************************** **【函数名称】 __makeDir **【函数功能】 创建录音目录 **【参数】 **【返回值】 ****************************************************************/ bool COpRecord::__makeDir( CString& RcdFile ) { int index = RcdFile.ReverseFind('\\'); if (index == -1) index = RcdFile.ReverseFind('/'); CString Dir = RcdFile.Left(index + 1); SHCreateDirectoryEx(NULL, Dir, NULL); RcdFile.Replace("\\", "/"); return true; } /***************************************************************** **【函数名称】 attachHostChan **【函数功能】 关联操作与主控通道 **【参数】 **【返回值】 *****************************************************************/ bool COpRecord::attachHostChan( CVirtualChan* pChan ) { m_pHostChan = pChan; return true; } /***************************************************************** **【函数名称】 detachHostChan **【函数功能】 取消通道关联 **【参数】 **【返回值】 *****************************************************************/ void COpRecord::detachHostChan( void ) { m_pHostChan = NULL; } /***************************************************************** **【函数名称】 start **【函数功能】 执行操作 **【参数】 **【返回值】 *****************************************************************/ bool COpRecord::start( LineOpParam* pParam ) { LOGGER(LOG_LEVEL_NORMAL, _T("{OpRecord}: 通道[%lu]执行录音,State:%d"), m_pHostChan->no(), m_pHostChan->state()); // 校验状态 //if(m_pHostChan->state() != CHAN_LOGIC_STATE_TALKING || m_pHostChan->state()!= CHAN_LOGIC_STATE_STANDBY) // return false; CString rcdFile = pParam->szParam3; if(!__makeDir(rcdFile)) return false; LOGGER(LOG_LEVEL_NORMAL, _T("{OpRecord}: 通道[%lu]执行录音, RecordFile = %s"), m_pHostChan->no(), rcdFile); return CFsProxy::GetInstance().record(uniqueId(), m_pHostChan, rcdFile); } /***************************************************************** **【函数名称】 onBackgroudJobDone **【函数功能】 后台命令执行结束事件处理 **【参数】 **【返回值】 *****************************************************************/ void COpRecord::onBackgroudJobDone( PBG_JOB_NOTIFY pNotify ) { if(strstr(pNotify->JobBody, ESL_JOB_DONE_RES_OK) == NULL) _end(false); else _end(true); }