| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- #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;
- }
|