#include "StdAfx.h" #include "VirtualProxy.h" #include "ReqBase.h" CVirtualProxy::CVirtualProxy(CProxyShell* pParent, CRDRID DevId) : m_pParent(pParent), m_DevId(DevId), m_pLineReq(NULL), m_State(VIRTUAL_LINE_STATE_FREE), m_ActiveCallId(0), m_IsInvalid(false) { } /***************************************************************** **【函数名称】 isIdle **【函数功能】 代理是否线路空闲 **【参数】 **【返回值】 ****************************************************************/ bool CVirtualProxy::isIdle( void ) const { if(m_State == VIRTUAL_LINE_STATE_FREE && m_ActiveCallId == 0) return true; else return false; } /***************************************************************** **【函数名称】 onDevChEvent **【函数功能】 物理线路向上层发送的设备主动事件 **【参数】 nEvtType 事件类型 lpContent 事件内容 **【返回值】 *****************************************************************/ void CVirtualProxy::onDevChEvent( DEV_CH_EVT_TYPE EvtType, LPCTSTR lpContent ) { if(m_pLineReq != NULL) m_pLineReq->onDevChEvent(this, EvtType, lpContent); } /***************************************************************** **【函数名称】 onLineStateChanged **【函数功能】 线路状态变化事件处理 **【参数】 nCall 主会话ID nSubCall 子会话ID nStatus 线路基本状态 lpCallerNum 主叫号码 lpCalleeNum 被叫号码 **【返回值】 ****************************************************************/ void CVirtualProxy::onLineStateChanged( long Call, long SubCall, VIRTUAL_LINE_STATE State, LPCTSTR lpCallerNum, LPCTSTR lpCalleeNum ) { // 子呼叫空闲状态过滤(只处理操作) if(m_pLineReq != NULL && SubCall != SESSION_INVALID_SUB_CALL && State == VIRTUAL_LINE_STATE_FREE) { m_pLineReq->onLineStateChanged(this, State, Call, SubCall, lpCallerNum, lpCalleeNum); return; } // end if // 处理线路状事件 _procLineState(Call, SubCall, State, lpCallerNum, lpCalleeNum); // 保存呼叫信息 m_State = State; m_CallerNum = lpCallerNum; m_CalleeNum = lpCalleeNum; m_ActiveCallId = (State == VIRTUAL_LINE_STATE_FREE) ? SESSION_INVALID_CALL : Call; // 委托操作执行 if(m_pLineReq != NULL) m_pLineReq->onLineStateChanged(this, State, Call, SubCall, lpCallerNum, lpCalleeNum); // 通知业务逻辑线路状态变化事件 _notifyLineState(); } /***************************************************************** **【函数名称】 onNewCall **【函数功能】 线路进入会话事件 **【参数】 nCall 线路当前所属的主会话ID nSubCall 线路当前所属的子会话ID **【返回值】 ****************************************************************/ void CVirtualProxy::onNewCall( long Call, long SubCall ) { m_ActiveCallId = Call; }