#include "StdAfx.h" #include "StatisticsMgr.h" #include "CallDetail.h" SINGLETON_IMPLEMENT(CStatisticsMgr) CStatisticsMgr::CStatisticsMgr(void) { m_CallDetailMap.InitHashTable(MAX_LENGTH_HASH); } CStatisticsMgr::~CStatisticsMgr(void) { } /***************************************************************** **【函数名称】 onCallDetail **【函数功能】 呼叫明细处理 **【参数】 CallId: CallID Event: 统计事件 HostLine: 主控线路 Param: 统计信息 **【返回值】 *****************************************************************/ void CStatisticsMgr::onCallDetail( ULONG CallId, REP_EVENT Event, UINT HostLine, PARAM Param ) { CCallDetail* pCallDetail = NULL; // 查找活动会话 BOOL IsActive = m_CallDetailMap.Lookup(CallId, pCallDetail); if (!IsActive) { pCallDetail = new CCallDetail(CallId); m_CallDetailMap.SetAt(CallId, pCallDetail); } // 呼叫结束事件,销毁ActiveCall if (Event == REP_EVENT_END_CALL) { // 通知ActiveCall结束 pCallDetail->end(); // 清理map m_CallDetailMap.RemoveKey(CallId); delete pCallDetail; pCallDetail = NULL; } else { // 常规事件和状态,处理分发 pCallDetail->onCallDetail(CallId, Event, HostLine, Param); } } /***************************************************************** **【函数名称】 getFinalExt **【函数功能】 根据CallID获得最后应答分机 **【参数】 CallId:CallID **【返回值】 分机号 *****************************************************************/ UINT CStatisticsMgr::getFinalExt( ULONG CallId ) { CCallDetail* pCallDetail = NULL; // 查找活动会话 m_CallDetailMap.Lookup(CallId, pCallDetail); if (pCallDetail != NULL) { return pCallDetail->getLastExten(); } return 0; }