#include "StdAfx.h" #include "ExtenCtrl.h" #include "Exten.h" CExtenCtrl::CExtenCtrl(void) { } CExtenCtrl::~CExtenCtrl(void) { } /***************************************************************** **【函数名称】 removeExten **【函数功能】 删除所有分机 **【参数】 **【返回值】 ****************************************************************/ void CExtenCtrl::removeExten( void ) { // 清除所有分机 POSITION pos = m_ExtenMap.GetStartPosition(); while(pos != NULL) { UINT ExtId = 0; CExten* pExt = NULL; m_ExtenMap.GetNextAssoc(pos, ExtId, pExt); ASSERT(pExt != NULL); pExt->release(); delete pExt; } // end while m_ExtenMap.RemoveAll(); } /***************************************************************** **【函数名称】 removeExten **【函数功能】 清除指定分机 **【参数】 a_Exten: 分机ID **【返回值】 ****************************************************************/ void CExtenCtrl::removeExten( UINT a_Exten ) { CExten* pExt = NULL; // 查找是否存在当前分机 if(m_ExtenMap.Lookup(a_Exten, pExt)) { pExt->release(); m_ExtenMap.RemoveKey(a_Exten); delete pExt; pExt = NULL; } // end if } /***************************************************************** **【函数名称】 onExtenStateUpdated **【函数功能】 分机状态变化事件处理 **【参数】 a_pCmd: PDU命令内容 **【返回值】 ****************************************************************/ void CExtenCtrl::onExtenStateUpdated( CPduEntity* a_pCmd ) { CExten* pExt = NULL; UINT ExtId = a_pCmd->GetDataUInt(0); // 查找是否存在当前分机 if(!m_ExtenMap.Lookup(ExtId, pExt)) { pExt = new CExten(ExtId); m_ExtenMap.SetAt(ExtId, pExt); } // end if // 刷新状态 pExt->setState(a_pCmd); } /***************************************************************** **【函数名称】 getExten **【函数功能】 获取指定分机 **【参数】 a_Exten: 要查找的分机号 **【返回值】 ****************************************************************/ CExten* CExtenCtrl::getExten( UINT a_Exten ) { CExten* pPhoneExt = NULL; m_ExtenMap.Lookup(a_Exten, pPhoneExt); return pPhoneExt; } /***************************************************************** **【函数名称】 isExtenExisted **【函数功能】 指定的分机是否存在 **【参数】 a_Exten: 要查找的分机号 **【返回值】 ****************************************************************/ bool CExtenCtrl::isExtenExisted( UINT a_Exten ) { return getExten(a_Exten) != NULL; } /***************************************************************** **【函数名称】 isExtenUsed **【函数功能】 指定的分机是否已被占用 **【参数】 a_Exten: 要查找的分机号 **【返回值】 ****************************************************************/ bool CExtenCtrl::isExtenUsed( UINT a_Exten ) { CExten* pPhoneExt = NULL; m_ExtenMap.Lookup(a_Exten, pPhoneExt); ASSERT(pPhoneExt != NULL); return pPhoneExt->assoAgent() == 0 ? false : true; } /***************************************************************** **【函数名称】 setAssoAgent **【函数功能】 设置分机关联的座席 **【参数】 **【返回值】 ****************************************************************/ void CExtenCtrl::setAssoAgent( UINT a_Exten, UINT a_AgentId ) { CExten* pExt = NULL; if(m_ExtenMap.Lookup(a_Exten, pExt)) pExt->setAssoAgent(a_AgentId); } /***************************************************************** **【函数名称】 getAssoAgent **【函数功能】 查找关联的座席工号 **【参数】 a_Exten: 要查找的分机号 **【返回值】 当前分机关联的座席工号,0 -> 未关联座席 ****************************************************************/ UINT CExtenCtrl::getAssoAgent( UINT a_Exten ) { CExten* pExt = NULL; if(!m_ExtenMap.Lookup(a_Exten, pExt)) return 0; return pExt->assoAgent(); } /***************************************************************** **【函数名称】 getExtenState **【函数功能】 得到指定分机的当前状态 **【参数】 **【返回值】 ****************************************************************/ INNER_STATE CExtenCtrl::getExtenState( UINT a_Exten ) { CExten* pExt = NULL; m_ExtenMap.Lookup(a_Exten, pExt); if(pExt != NULL) return pExt->state(); else return INNER_STATE_DISABLED; }