| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199 |
- #include "StdAfx.h"
- #include "ProxyExten.h"
- #include "ProxyShell.h"
- #include "ReqBase.h"
- #include "SessionShell.h"
- CProxyExten::CProxyExten(CProxyShell* pParent, CRDRID DevId) : CVirtualProxy(pParent, DevId), m_ExtNum(DevId.ChanNo), m_IsHoldOn(false), m_RealDevId(DevId)
- {
- }
- CProxyExten::~CProxyExten(void)
- {
- // 通知业务逻辑线路被删除
- ASSERT(m_pParent != NULL);
- m_pParent->notifyDevResourceState(DEV_RES_TYPE_EXT, m_ExtNum, INNER_STATE_REMOVE);
- }
- /*****************************************************************
- **【函数名称】 __transVirtualState2OuterState
- **【函数功能】 映设虚拟线路状态到外部识别的状态
- **【参数】 State: 线路状态
- **【返回值】
- ****************************************************************/
- UINT CProxyExten::__transVirtualState2OuterState( VIRTUAL_LINE_STATE State ) const
- {
- switch(State)
- {
- case VIRTUAL_LINE_STATE_DISABLED: return INNER_STATE_DISABLED;
- case VIRTUAL_LINE_STATE_REMOVE: return INNER_STATE_REMOVE;
- case VIRTUAL_LINE_STATE_FREE: return INNER_STATE_FREE;
- case VIRTUAL_LINE_STATE_INIT: return INNER_STATE_INIT;
- case VIRTUAL_LINE_STATE_DIALING: return INNER_STATE_DIALING;
- case VIRTUAL_LINE_STATE_RING_BACK: return INNER_STATE_RING_BACK;
- case VIRTUAL_LINE_STATE_ALERTING: return INNER_STATE_ALERTING;
- case VIRTUAL_LINE_STATE_TALKING: return INNER_STATE_TALKING;
- default: ASSERT(FALSE);
- } // end switch
- return INNER_STATE_DISABLED;
- }
- /*****************************************************************
- **【函数名称】 _procLineState
- **【函数功能】 线路状态变化事件处理
- **【参数】 Call 主会话ID
- SubCall 子会话ID
- State 线路基本状态
- lpCallerNum 主叫号码
- lpCalleeNum 被叫号码
- **【返回值】
- ****************************************************************/
- void CProxyExten::_procLineState( long Call, long SubCall, VIRTUAL_LINE_STATE State, LPCTSTR lpCallerNum, LPCTSTR lpCalleeNum )
- {
- //TODO: do nothing
- }
- /*****************************************************************
- **【函数名称】 _notifyLineState
- **【函数功能】 通知上层逻辑线路状态变化事件
- **【参数】
- **【返回值】
- ****************************************************************/
- void CProxyExten::_notifyLineState( void )
- {
- // 通知业务逻辑线路状态变化事件
- ASSERT(m_pParent != NULL);
- m_pParent->notifyDevResourceState(DEV_RES_TYPE_EXT, m_ExtNum, __transVirtualState2OuterState(m_State), m_CallerNum, m_CalleeNum);
- }
- /*****************************************************************
- **【函数名称】 notifyLineInfo
- **【函数功能】 通知上层逻辑线路信息
- **【参数】
- **【返回值】
- ****************************************************************/
- void CProxyExten::notifyLineInfo( PDU_DEV_TYPE a_DestType, int a_DestId ) const
- {
- // 通知业务逻辑线路状态变化事件
- ASSERT(m_pParent != NULL);
- m_pParent->notifyResourceDetail(a_DestType, a_DestId, DEV_RES_TYPE_EXT, m_ExtNum);
- m_pParent->notifyDevResourceState(a_DestType, a_DestId, DEV_RES_TYPE_EXT, m_ExtNum, __transVirtualState2OuterState(m_State), m_CallerNum, m_CalleeNum);
- }
- /*****************************************************************
- **【函数名称】 notifyLineInfo
- **【函数功能】 通知上层逻辑线路信息
- **【参数】
- **【返回值】
- ****************************************************************/
- void CProxyExten::notifyLineInfo( void ) const
- {
- ASSERT(m_pParent != NULL);
- m_pParent->notifyResourceDetail(DEV_RES_TYPE_EXT, m_ExtNum);
- m_pParent->notifyDevResourceState(DEV_RES_TYPE_EXT, m_ExtNum, __transVirtualState2OuterState(m_State), m_CallerNum, m_CalleeNum);
- }
- /*****************************************************************
- **【函数名称】 onLineStateChanged
- **【函数功能】 线路状态变化事件处理
- **【参数】 nCall 主会话ID
- nSubCall 子会话ID
- nStatus 线路基本状态
- lpCallerNum 主叫号码
- lpCalleeNum 被叫号码
- **【返回值】
- ****************************************************************/
- void CProxyExten::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;
- if(State == VIRTUAL_LINE_STATE_FREE)
- {
- m_ActiveCallId = SESSION_INVALID_CALL;
- m_DevId = m_RealDevId;
- }
- else
- m_ActiveCallId = Call;
- // 委托操作执行
- if(m_pLineReq != NULL)
- m_pLineReq->onLineStateChanged(this, State, Call, SubCall, lpCallerNum, lpCalleeNum);
- // 通知业务逻辑线路状态变化事件
- _notifyLineState();
- }
- /*****************************************************************
- **【函数名称】 holdOn
- **【函数功能】 线路保持
- **【参数】
- **【返回值】
- ****************************************************************/
- bool CProxyExten::holdOn( void )
- {
- if(m_IsHoldOn)
- return false;
- if(CSessionShell::GetInstance().procReqMute(m_ActiveCallId, m_DevId, true))
- {
- m_IsHoldOn = true;
- // 通知业务逻辑线路状态变化事件
- UINT HoldOnState = __transVirtualState2OuterState(m_State);
- HoldOnState |= INNER_STATE_HELD;
- ASSERT(m_pParent != NULL);
- m_pParent->notifyDevResourceState(DEV_RES_TYPE_EXT, m_ExtNum, HoldOnState, m_CallerNum, m_CalleeNum);
- }
- return m_IsHoldOn;
- }
- /*****************************************************************
- **【函数名称】 takeBack
- **【函数功能】 保持接回
- **【参数】
- **【返回值】
- ****************************************************************/
- bool CProxyExten::takeBack( void )
- {
- if(!m_IsHoldOn)
- return false;
- if(CSessionShell::GetInstance().procReqMute(m_ActiveCallId, m_DevId, false))
- {
- m_IsHoldOn = false;
- // 通知业务逻辑线路状态变化事件
- ASSERT(m_pParent != NULL);
- m_pParent->notifyDevResourceState(DEV_RES_TYPE_EXT, m_ExtNum, __transVirtualState2OuterState(m_State), m_CallerNum, m_CalleeNum);
- }
- return !m_IsHoldOn;
- }
- /*****************************************************************
- **【函数名称】 isFree
- **【函数功能】 是否空闲
- **【参数】
- **【返回值】
- ****************************************************************/
- bool CProxyExten::isFree( void ) const
- {
- return isNull() && __super::isFree();
- }
|