#include "StdAfx.h" #include "PlaySoundReq.h" #include "ProxyExten.h" #include "ControlShell.h" #include "ProxyShell.h" #include "MC.h" CPlaySoundReq::CPlaySoundReq(CProxyShell* pParent, CPduEntity& ReqPdu) : CReqBase(pParent, ReqPdu) { } CPlaySoundReq::~CPlaySoundReq(void) { } /***************************************************************** **【函数名称】 request **【函数功能】 发出请求(命令方式) **【参数】 **【返回值】 ****************************************************************/ bool CPlaySoundReq::request( void ) { // 初始化放音内容 PlayVoiceContent content; memset(&content, 0, sizeof(PlayVoiceContent)); content.nModel = (PlayVoiceMode)m_ReqPdu.GetDataInt(3); content.nDtmfCount = m_ReqPdu.GetDataInt(9); content.nDtmfPeriod = m_ReqPdu.GetDataInt(10); content.nTts = m_ReqPdu.GetDataInt(4); // TTS类型 content.nTtsDigitMode = m_ReqPdu.GetDataInt(5); // TTS数字播报模式 content.nTtsSpeed = m_ReqPdu.GetDataInt(7); // TTS语速 content.nTtsVolume = m_ReqPdu.GetDataInt(8); // TTS音量 content.cDtmfEnd = m_ReqPdu.GetDataString(11).GetAt(0); sprintf_s(content.szFileName, MAX_PATH, _T("%s"), m_ReqPdu.GetDataString(12)); // 放音启动日志 LOGGER(LOG_CLASS_BUSI, LOG_LEVEL_NORMAL, _T("{LineReq}: 线路[%lu]放音收号, FileName = %s, Mode = %lu"), m_pHostLine->lineId(), content.szFileName, content.nModel); // 启动放音 return CMC::GetInstance().playSound(m_pHostLine->devId(), &content); } /***************************************************************** **【函数名称】 cancel **【函数功能】 操作取消(命令方式) **【参数】 **【返回值】 ****************************************************************/ bool CPlaySoundReq::cancel( long InstanceCancel ) { // 放音停止日志 LOGGER(LOG_CLASS_BUSI, LOG_LEVEL_NORMAL, _T("{LineReq}: 线路[%lu]取消放音收号"), m_pHostLine->lineId()); m_InstanceCancel = InstanceCancel; CMC::GetInstance().playStop(m_pHostLine->devId()); end(false, NULL); // 返回 return true; } /***************************************************************** **【函数名称】 hangUp **【函数功能】 操作中挂机(命令方式) **【参数】 **【返回值】 ****************************************************************/ bool CPlaySoundReq::hangUp( long InstanceHangUp ) { LOGGER(LOG_CLASS_BUSI, LOG_LEVEL_NORMAL, _T("{LineReq}: 线路[%lu]放音收号因挂机取消"), m_pHostLine->lineId()); return CMC::GetInstance().playStop(m_pHostLine->devId()); } /***************************************************************** **【函数名称】 end **【函数功能】 操作完成 **【参数】 IsSucceed 操作是否成功 lpData 随路数据 **【返回值】 ****************************************************************/ void CPlaySoundReq::end( bool IsSucceed, LPCTSTR lpData ) { if(IsSucceed) { LOGGER(LOG_CLASS_BUSI, LOG_LEVEL_NORMAL, _T("{LineReq}: 线路[%lu]放音收号成功"), m_pHostLine->lineId()); } else { LOGGER(LOG_CLASS_BUSI, LOG_LEVEL_WARNING, _T("{LineReq}: 线路[%lu]放音收号失败"), m_pHostLine->lineId()); } // end if // 返回执行结果 if(m_InstanceCancel != 0) { m_pParent->notifyReqResult(m_ReqPdu, m_InstanceCancel, !IsSucceed, lpData); } // end if m_pParent->onLineReqEnd(this, IsSucceed, lpData); } /***************************************************************** **【函数名称】 onDevChEvent **【函数功能】 线路向上层发送的设备主动事件 **【参数】 pEventLine 触发事件的线路 EvtType 事件类型 lpContent 事件内容 **【返回值】 *****************************************************************/ void CPlaySoundReq::onDevChEvent( CVirtualProxy* pEventLine, DEV_CH_EVT_TYPE EvtType, LPCTSTR lpContent ) { if(EvtType == DEV_CH_EVT_PLAY_END) { if(lpContent == CONST_ERR_PLAY_AUDIO) end(false, NULL); else end(true, lpContent); } } /***************************************************************** **【函数名称】 onLineStateChanged **【函数功能】 线路状态变化事件响应接口 **【参数】 pEventLine 状态变化的线路实体指针 LineState 线路当前状态 Call 主呼叫ID SubCall 子呼叫ID lpCallerNum 主叫号码 lpCalleeNum 被叫号码 **【返回值】 ****************************************************************/ void CPlaySoundReq::onLineStateChanged( CVirtualProxy* pEventLine, VIRTUAL_LINE_STATE LineState, long Call, long SubCall, LPCTSTR lpCallerNum, LPCTSTR lpCalleeNum ) { // 正在放音时外线挂机 if(LineState == VIRTUAL_LINE_STATE_FREE) end(false, NULL); }