#include "StdAfx.h" #include "LogicLineTrunk.h" #include "CallSession.h" #include "SessionHolder.h" #include "NetworkCti.h" #include "StatisticsMgr.h" CLogicLineTrunk::CLogicLineTrunk(UINT ResId) : CLogicLine(ResId) { } CLogicLineTrunk::~CLogicLineTrunk(void) { } /***************************************************************** **【函数名称】 onLineStatusUpdated **【函数功能】 处理线路状态变化 **【参数】 EvtInfo: 线路资源状态 **【返回值】 ****************************************************************/ void CLogicLineTrunk::onLineStatusUpdated( const EventResStatus &EvtInfo ) { if(m_LineStatus == EvtInfo.nState) return; // 保存线路信息 m_LineStatus = EvtInfo.nState; m_CallerNum = EvtInfo.szCallerNum; m_CalleeNum = EvtInfo.szCalleeNum; if(m_CallId != 0) ILogger::getInstance().log(LOG_CLASS_DEV, LOG_LEVEL_NORMAL, _T("{LogicLineTrunk}: 线路状态, LineId = %lu,State=%d,CallId=%lu,Caller=%s,Callee=%s"), m_LineId, m_LineStatus, m_CallId, m_CallerNum, m_CalleeNum); //白阳 2019-7-17 //保持处理 //if ( EvtInfo.nResType != 0 && (EvtInfo.nState && HELD_STATE_MASK) == INNER_STATE_HELD) //{ // m_HoldCallId = m_CallId; // m_CallId = 0; //} ////接回处理 //if (EvtInfo.nResType == 0 && (EvtInfo.nState && HELD_STATE_MASK) == INNER_STATE_HELD) //{ // m_CallId = m_HoldCallId; // m_CallId = 0; //} ////获取中继呼入类型 //m_FinaTrunk = CStatisticsMgr::GetInstance().getFinalExt(m_CallId); // 发送线路状态变化信息到ivr(需要显示的是外线的主被叫号码) //pushLineData2IVR(); //统计线路状态变化 _reportLineStatus(); // 通知会话状态变化,保持会话(m_nHoldCallId)不再通知 CSessionHolder::GetInstance().onLineStatusUpdated(this); } //白阳 7-18 //中继向相关的ivr发送,不进行ivr流程的任何转接操作 //void CLogicLineTrunk::pushLineData2IVR() //{ //取到相关的随路数据,中继号 //int m_eventID; //CString str_eventID; //UINT m_AssoLineType; //CCallSession* pTrunkSession; //pTrunkSession = CSessionHolder::GetInstance().findSession(m_CallId); ////str_eventID.Format("%d",m_eventID); //// 获取对端线路类型 ////CLogicLine* pAssoLine = pTrunkSession->getAssoLine(this); ////if (pAssoLine != NULL) ////{ //// m_AssoLineType = pAssoLine->type(); //// //外线资源类型判定 //// if (m_AssoLineType == DEV_RES_TYPE_TRUNK) { //// m_AssoLineType = pAssoLine->typeExtTrunk(); //// } ////} //// 发送线路状态变化信息到IVR //CPduEntity Cmd(PDU_CMD_CTI_LINE_STATE); //Cmd.SetDataUInt(0, m_LineId); //Cmd.SetDataUInt(1, m_LineStatus); //Cmd.SetDataULong(2, (m_CallId == 0 ? m_HoldCallId : m_CallId)); //Cmd.SetDataUInt(3, m_AgentId); //Cmd.SetDataString(4, m_CallerNum); //Cmd.SetDataString(5, m_CalleeNum); //Cmd.SetDataString(6, str_eventID); //Cmd.SetDataUInt(7, /*m_AssoLineType*/DEV_RES_TYPE_TRUNK); // ////IVR接收相关的消息,通过HP_Server发送给前端的页面显示 //Cmd.SetDataUInt(9, m_FinaTrunk); //Cmd.SetDataUInt(10, m_CurrentOpType); // 传入当前线路操作类型 //Cmd.SetDataInt(11, m_ActionID); // ////向IVR发送相关的消息 //CNetworkCti::GetInstance().send2IVR(Cmd); //}