#include "StdAfx.h" #include "TrunkBase.h" #include "DevControl.h" #include "VsControl.h" CTrunkBase::CTrunkBase(UINT TrunkId) : m_TrunkId(TrunkId), m_DevLinkCallId(CONST_DEV_LINK_CALL_NULL), m_LineStatus(TRUNK_STATE_FREE) { } /***************************************************************** **【函数名称】 _setState **【函数功能】 设置线路当前状态 **【参数】 Flag 状态标识 **【返回值】 ****************************************************************/ void CTrunkBase::_setState( TRUNK_STATE NewState, int Flag ) { // 事件过滤 if(m_LineStatus == NewState) return; // 保存当前状态 m_LineStatus = NewState; // 线路空闲的后续处理 if(m_LineStatus == TRUNK_STATE_FREE) _onFree(Flag); // 通知线路状态变化事件 CString strTrunkId; strTrunkId.Format("%lu", m_TrunkId); CDevControl::GetInstance().onEventResState(DEV_RES_TYPE_TRUNK, strTrunkId, m_LineStatus, m_CallerNum, m_CalleeNum); } /***************************************************************** **【函数名称】 _onFree **【函数功能】 线路空闲的后续处理 **【参数】 Flag 主动挂机还是被动挂机 **【返回值】 ****************************************************************/ void CTrunkBase::_onFree( int Flag ) { // 清空主被叫号码 m_CallerNum = _T(""); m_CalleeNum = _T(""); CDevControl::GetInstance().onEventLog(LOG_LEVEL_NORMAL, _T("{Trunk_%d}: 线路空闲"), m_TrunkId); // 通知录音VP台停止录音 CVsControl::GetInstance().notifyLineFree(m_TrunkId, DEV_RES_TYPE_TRUNK); } /***************************************************************** **【函数名称】 regist **【函数功能】 注册线路 **【参数】 **【返回值】 ****************************************************************/ void CTrunkBase::regist( void ) { CString strTrunkId; strTrunkId.Format(_T("%lu"), m_TrunkId); // 通知业务逻辑线路创建事件 CDevControl::GetInstance().onEventResDetail(DEV_RES_TYPE_TRUNK, strTrunkId); CDevControl::GetInstance().onEventResState(DEV_RES_TYPE_TRUNK, strTrunkId, m_LineStatus); } /***************************************************************** **【函数名称】 onDevLinkEventS **【函数功能】 DEV Link S 事件响应 **【参数】 pInfoS S事件消息内容 **【返回值】 ****************************************************************/ void CTrunkBase::onDevLinkEventS( DevLinkInfoS* pInfoS ) { // 是否为外线来电呼入 if(m_DevLinkCallId == CONST_DEV_LINK_CALL_NULL && pInfoS->nResStatus == TRUNK_STATE_ALERTING) // 外线来电 { CDevControl::GetInstance().onEventLog(LOG_LEVEL_NORMAL, _T("{Trunk_%s}: 应答外线来电, CallerNum = %s, CalleeNum = %s, DevLinkCallId = %ld"), pInfoS->szResId, pInfoS->szCallerNum, pInfoS->szCalleeNum, pInfoS->nDevLinkCallId); } // end if // 更新数据 m_CallerNum = pInfoS->szCallerNum; m_CalleeNum = pInfoS->szCalleeNum; m_DevLinkCallId = pInfoS->nDevLinkCallId; // 更新线路状态 _setState((TRUNK_STATE)pInfoS->nResStatus, pInfoS->nFlag); } /***************************************************************** **【函数名称】 onDevLinkEventA **【函数功能】 DEV Link A 事件响应 **【参数】 DevLinkCallId DevLink CallId **【返回值】 ****************************************************************/ void CTrunkBase::onDevLinkEventA( int DevLinkCallId ) { } /***************************************************************** **【函数名称】 onDevLinkEventD **【函数功能】 DEV Link D 事件响应 **【参数】 DevLinkCallId DevLink CallId **【返回值】 ****************************************************************/ void CTrunkBase::onDevLinkEventD( int DevLinkCallId ) { m_DevLinkCallId = CONST_DEV_LINK_CALL_NULL; // 初始化线路状态 _setState(TRUNK_STATE_FREE, 0); }