| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124 |
- #include "StdAfx.h"
- #include "ConsultSession.h"
- #include "CallSession.h"
- #include "ProxyShell.h"
- #include "MC.h"
- CConsultSession::CConsultSession(CCallSession* pParent, long SubId, PendingCallInfo* pInfo) : CSubSession(pParent, SubId, pInfo)
- {
- m_PeerLineId = pInfo->nAssoLine;
- m_IsConnected = false;
- m_IsPlayTone = false;
- }
- CConsultSession::~CConsultSession(void)
- {
- }
- /*****************************************************************
- **【函数名称】 _onDialCancel
- **【函数功能】 呼叫取消处理
- **【参数】
- **【返回值】
- *****************************************************************/
- void CConsultSession::_onDialCancel( void )
- {
- // 停止回铃音播放
- if(m_IsPlayTone)
- CMC::GetInstance().playTone(m_pInfo->nHostLine, CHANNEL_TONE_NULL);
- // 呼叫成功后被叫端挂机
- if(m_IsConnected)
- {
- // 主控线路和被叫线路的断开通话连接
- CMC::GetInstance().bridgeDevice(m_pInfo->nHostLine, m_pInfo->nAssoLine, false);
- } // end if
- // 原通话线路取消静音
- m_pParent->lineMute(m_pInfo->nHostLine, false);
- // 主控线路状态修正
- if(m_pParent->isExist(m_pInfo->nHostLine, m_HostLineParty))
- {
- CProxyShell::GetInstance().onLineStateUpdated(m_pInfo->nHostLine, m_pParent->id(), SESSION_INVALID_SUB_CALL,
- (VIRTUAL_LINE_STATE)m_pInfo->nHostLineStatus, m_pInfo->szPreCallerNum, m_pInfo->szPreCalleeNum);
- } // end if
- }
- /*****************************************************************
- **【函数名称】 OnDialOK
- **【函数功能】 呼叫成功后续处理
- **【参数】
- **【返回值】
- *****************************************************************/
- void CConsultSession::_onDialOK( void )
- {
- // 停止回铃音播放
- if(m_IsPlayTone)
- CMC::GetInstance().playTone(m_pInfo->nHostLine, CHANNEL_TONE_NULL);
- // 已应答呼叫标志
- m_IsConnected = true;
- // 建立主控线路和被叫线路的通话连接
- CMC::GetInstance().bridgeDevice(m_pInfo->nHostLine, m_pInfo->nAssoLine, true);
- }
- /*****************************************************************
- **【函数名称】 _onDialing
- **【函数功能】 呼叫进展处理
- **【参数】
- **【返回值】
- *****************************************************************/
- void CConsultSession::_onDialRing( void )
- {
- m_IsPlayTone = true;
- //对原通话主控线路执行回铃音
- CMC::GetInstance().playTone(m_pInfo->nHostLine, CHANNEL_TONE_RINGBACK);
- // 对原通话执行静音操作
- m_pParent->lineMute(m_pInfo->nHostLine, true);
- }
- /*****************************************************************
- **【函数名称】 resume
- **【函数功能】 操作暂停后继续处理
- **【参数】 Type 操作类型
- **【返回值】
- *****************************************************************/
- bool CConsultSession::resume( UINT Type )
- {
- // 原通话的对端线路停止放音
- CMC::GetInstance().playStop(m_PeerLineId);
- // 原通话线路取消静音
- m_pParent->lineMute(m_pInfo->nHostLine, false);
- // 转换会话模式
- if(Type == 0) // 转移呼叫
- {
- // 主控线路和被叫线路的断开通话连接
- CMC::GetInstance().bridgeDevice(m_pInfo->nHostLine, m_pInfo->nAssoLine, false);
- // 主会话中线路替换
- m_pParent->removeLine(m_pInfo->nAssoLine, CALL_PARTY_PENDING);
- m_pParent->removeLine(m_pInfo->nHostLine, m_HostLineParty);
- m_pParent->insertLine(m_pInfo->nAssoLine, m_HostLineParty, true);
- // 主控线路挂机
- CMC::GetInstance().dropCall(m_pInfo->nHostLine, true);
- }
- else // 会议呼叫
- {
- // 主会话转换成会议
- m_pParent->trans2Meeting(m_pInfo->nHostLine);
- // 被叫线路职责转换
- m_pParent->removeLine(m_pInfo->nAssoLine, CALL_PARTY_PENDING);
- m_pParent->insertLine(m_pInfo->nAssoLine, CALL_PARTY_MEETING, true);
- } // end if
- return true;
- }
|