| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185 |
- #include "StdAfx.h"
- #include "TapiLineFax.h"
- #include "DevControl.h"
- #include "VsControl.h"
- #include "TapiOpBase.h"
- CTapiLineFax::CTapiLineFax(DWORD DevID, HLINE Handle, DWORD ApiVersion, CString ExtID, HLINEAPP LineApp) : CTapiLine(DevID, Handle, ApiVersion, ExtID, LineApp),
- m_AssoTrunkId(CONST_DEV_ID_INVALID)
- {
- }
- CTapiLineFax::~CTapiLineFax(void)
- {
- }
- /*****************************************************************
- **【函数名称】 _procDevLinkEventS
- **【函数功能】 DevLink S事件后续处理
- **【参数】 pInfoS DevLink S事件内容
- **【返回值】
- ****************************************************************/
- void CTapiLineFax::_procDevLinkEventS( DevLinkInfoS* pInfoS )
- {
- // 保存外线ID
- if(pInfoS->nPeerResType == DEV_RES_TYPE_TRUNK)
- sscanf_s(pInfoS->szPeerResId, "%lu", &m_AssoTrunkId);
- // 状态事件过滤(保持状态不处理;重复的通话事件不处理)
- if((pInfoS->nResStatus == INNER_STATE_HELD) ||
- (pInfoS->nResStatus == INNER_STATE_TALKING && m_LineStatus == INNER_STATE_TALKING && pInfoS->nDevLinkCallId == m_DevLinkCallId))
- {
- return;
- } // end if
- // 通知关联操作
- if(m_pCurrTapiOp != NULL && m_AssoTrunkId != CONST_DEV_ID_INVALID)
- {
- m_pCurrTapiOp->onDevLinkEventS(this, pInfoS);
- } // end if
- // 保存呼叫信息
- m_DevLinkCallId = pInfoS->nDevLinkCallId;
- m_LineStatus = pInfoS->nResStatus;
- // 线路状态进行分类处理
- if(m_LineStatus == INNER_STATE_FREE)
- __onHangUp();
- // 通知业务逻辑线路状态变化
- CDevControl::GetInstance().onEventResState(DEV_RES_TYPE_FAX, m_ExtenID, __ivrStatusToFax(m_LineStatus), pInfoS->szCallerNum, pInfoS->szCalleeNum);
- }
- /*****************************************************************
- **【函数名称】 _procDevLinkEventD
- **【函数功能】 DevLink D事件后续处理
- **【参数】
- **【返回值】
- ****************************************************************/
- void CTapiLineFax::_procDevLinkEventD( int DevLinkCallId )
- {
- // 更新DevLink CallId
- m_DevLinkCallId = CONST_DEV_LINK_CALL_NULL;
- // 通知关联操作
- if(m_pCurrTapiOp != NULL)
- m_pCurrTapiOp->onDevLinkEventD(this, DevLinkCallId);
- // 更新线路状态
- if(m_LineStatus != INNER_STATE_FREE)
- {
- m_LineStatus = INNER_STATE_FREE;
- // 通知线路空闲状态
- CDevControl::GetInstance().onEventResState(DEV_RES_TYPE_FAX, m_ExtenID, INNER_STATE_FREE);
- // 通知VP台挂机
- __onHangUp();
- } // end if
- }
- /*****************************************************************
- **【函数名称】 _procLineInitStatus
- **【函数功能】 初始化线路状态处理
- **【参数】
- **【返回值】
- ****************************************************************/
- void CTapiLineFax::_procLineInitStatus( HCALL CallId, DWORD CallState, DWORD CallStateDetail, DWORD CallPrivilege )
- {
- // 得到活动呼叫状态
- if(m_ActiveCall == NULL) // 如果活动呼叫为空
- {
- m_LineStatus = INNER_STATE_FREE;
- }
- else // 如果活动呼叫不为空
- {
- if(CallId == m_ActiveCall) // 如果当前呼叫等于活动呼叫
- {
- m_LineStatus = _mapTapiCallState(CallState);
- }
- } // end if(m_hActiveCall)
- // 通知线路状态
- CDevControl::GetInstance().onEventResState(DEV_RES_TYPE_FAX, m_ExtenID, __ivrStatusToFax(m_LineStatus));
- }
- /*****************************************************************
- **【函数名称】 __onHangUp
- **【函数功能】 线路挂机处理函数
- **【参数】
- **【返回值】
- ****************************************************************/
- void CTapiLineFax::__onHangUp(void)
- {
- m_AssoTrunkId = CONST_DEV_ID_INVALID;
- // 通知VS, IVR线路释放
- CVsControl::GetInstance().notifyLineFree(atoi(m_ExtenID), DEV_RES_TYPE_FAX);
- }
- /*****************************************************************
- **【函数名称】 __ivrStatusToFax
- **【函数功能】
- **【参数】
- **【返回值】
- ****************************************************************/
- UINT CTapiLineFax::__ivrStatusToFax( UINT IvrState )
- {
- if(IvrState >= FAX_STATE_BUSY)
- return FAX_STATE_BUSY;
- return IvrState;
- }
- /*****************************************************************
- **【函数名称】 regist
- **【函数功能】 注册线路
- **【参数】
- **【返回值】
- ****************************************************************/
- void CTapiLineFax::regist( void )
- {
- // 通知业务逻辑线路创建事件
- CDevControl::GetInstance().onEventResDetail(DEV_RES_TYPE_FAX, m_ExtenID);
- CDevControl::GetInstance().onEventResState(DEV_RES_TYPE_FAX, m_ExtenID, m_LineStatus);
- // 设置线路可响应的状态事件
- HRESULT hRet = ::lineSetStatusMessages(m_Handle, LINE_DEV_STATE_ALL, LINE_ADDRESS_STATE_ALL);
- ASSERT(hRet == S_OK);
- }
- /*****************************************************************
- **【函数名称】 redoCallStatus
- **【函数功能】 强制重新处理线路状态
- **【参数】
- **【返回值】
- ****************************************************************/
- void CTapiLineFax::redoCallStatus( HCALL CallId, DWORD CallState, DWORD CallStateDetail )
- {
- }
- /*****************************************************************
- **【函数名称】 setDevLinkHeldId
- **【函数功能】 设置当前线路被保持的 DevLinkCallId
- **【参数】
- **【返回值】
- ****************************************************************/
- void CTapiLineFax::setDevLinkHeldId( const int DevLinkCallId )
- {
- }
- /*****************************************************************
- **【函数名称】 setDevLinkCallId
- **【函数功能】 设置当前线路被活动的 DevLinkCallId
- **【参数】
- **【返回值】
- ****************************************************************/
- void CTapiLineFax::setDevLinkCallId( const int DevLinkCallId )
- {
- }
|