#include "StdAfx.h" #include "LineRecordIprr.h" #include "Config.h" #include "IprControl.h" CLineRecordIprr::CLineRecordIprr(int LineId) : CLine(LineId), m_RecState(REC_STATE_IDLE), m_StationId(CONST_IPR_STATION_INVALID), m_SessionId(CONST_IPR_SESSION_INVALID), m_SessionCodec(CONST_IPR_CODEC_INVALID), m_FowardingPPort(0), m_FowardingSPort(0), m_IsSessionActived(false) { m_State = S_CALL_UNAVAILABLE; m_IPOLineID = CConfig::getAssoIpoLineIdOfRecordLineIpr(LineId); ILogger::getInstance().log(LOG_CLASS_BUSI, LOG_LEVEL_NORMAL, _T("{Line}: 初始化IP录音线路, LineId = %d, IPOLineId = %d"), m_LineID, m_IPOLineID); } CLineRecordIprr::~CLineRecordIprr(void) { } /***************************************************************** **【函数名称】 getState **【函数功能】 获取状态字符串 **【参数】 **【返回值】 ****************************************************************/ LPCTSTR CLineRecordIprr::getState( void ) const { switch(m_State) { case S_CALL_STANDBY: return _T("空闲"); case S_CALL_UNAVAILABLE: return _T("不可用"); case S_IPR_COMMUNICATING: return _T("协商中"); case S_IPR_USING: return _T("录音中"); default: return _T("未知状态"); } } /***************************************************************** **【函数名称】 procDevMsg **【函数功能】 底层事件响应处理 **【参数】 pEvent 事件信息结构体 **【返回值】 ****************************************************************/ void CLineRecordIprr::procDevMsg( PSSM_EVENT pEvent ) { switch(pEvent->wEventCode) { case E_CHG_ChState: // 模拟录音线路状态事件 CIprControl::GetInstance().onEventIprState(this, SsmGetChState(pEvent->nReference)); break; case E_IPR_START_REC_CB: CIprControl::GetInstance().onEventStartRecCb(this, pEvent); break; case E_IPR_STOP_REC_CB: CIprControl::GetInstance().onEventStopRecCb(this, pEvent); break; case E_IPR_PAUSE_REC_CB: CIprControl::GetInstance().onEventPauseRecCb(this, pEvent); break; case E_IPR_RESTART_REC_CB: CIprControl::GetInstance().onEventRestartRecCb(this, pEvent); break; case E_IPR_ACTIVE_SESSION_CB: CIprControl::GetInstance().onEventActiveSessionCb(this, pEvent); break; case E_IPR_DEACTIVE_SESSION_CB: CIprControl::GetInstance().onEventDeactiveSessionCb(this, pEvent); break; case E_IPR_ACTIVE_AND_REC_CB: CIprControl::GetInstance().onEventActiveAndRecCb(this, pEvent); break; case E_IPR_DEACTIVE_AND_STOPREC_CB: CIprControl::GetInstance().onEventDeactiveAndStopRecCb(this, pEvent); break; } } /***************************************************************** **【函数名称】 procCmd **【函数功能】 线路命令处理 **【参数】 pPduEntity 线路命令指针 **【返回值】 ****************************************************************/ void CLineRecordIprr::procCmd( CPduEntity * pPduEntity ) { switch(pPduEntity->GetCmdType()) { case PDU_CMD_CTI_VS_RECORD: // 处理录音命令 CIprControl::GetInstance().onCmdLineRecord(this, pPduEntity); break; case PDU_CMD_CTI_VS_LINECONTROL: // 处理线路控制命令 CIprControl::GetInstance().onCmdLineControl(this, pPduEntity); break; } } /***************************************************************** **【函数名称】 isReady4Rec **【函数功能】 是否可以录音 **【参数】 **【返回值】 ****************************************************************/ bool CLineRecordIprr::isReady4Rec( CString& RecFileName ) { if(m_pCmdEntity == NULL || m_pCmdEntity->GetCmdType() != PDU_CMD_CTI_VS_RECORD) return false; RecFileName = m_pCmdEntity->GetDataString(3); //录音文件名 return true; } /***************************************************************** **【函数名称】 resetRecContext **【函数功能】 重置录音环境 **【参数】 **【返回值】 ****************************************************************/ void CLineRecordIprr::resetRecContext( void ) { m_RecState = REC_STATE_IDLE; m_SessionId = CONST_IPR_SESSION_INVALID; m_SessionCodec = CONST_IPR_CODEC_INVALID; m_FowardingPPort = 0; m_FowardingSPort = 0; m_IsSessionActived = false; }