| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116 |
- #include "StdAfx.h"
- #include "SubSession.h"
- #include "ControlShell.h"
- #include "CallSession.h"
- #include "VirtualProxy.h"
- #include "ProxyShell.h"
- #include "MC.h"
- CSubSession::CSubSession(CCallSession* pParent, long SubId, PendingCallInfo* pInfo) : m_pParent(pParent), m_Id(SubId)
- {
- m_HostLineParty = CALL_PARTY_UNKNOWN;
- m_pInfo = new PendingCallInfo;
- ASSERT(m_pInfo != NULL);
- memcpy(m_pInfo, pInfo, sizeof(PendingCallInfo));
- }
- CSubSession::~CSubSession(void)
- {
- delete m_pInfo;
- }
- /*****************************************************************
- **【函数名称】 DoBegin
- **【函数功能】 操作启动
- **【参数】 nHostLineParty 操作主控线路在主会话中的职责
-
- **【返回值】
- *****************************************************************/
- bool CSubSession::begin( CALL_PARTY_TYPE HostLineParty )
- {
- // 保存呼叫信息
- m_HostLineParty = HostLineParty;
- // 启动呼叫
- return CMC::GetInstance().dial(m_pInfo->nAssoLine, m_pInfo->szCalleeNum, m_pInfo->szCallerNum, m_pInfo->nSipAccountId);
- }
- /*****************************************************************
- **【函数名称】 DoReplace
- **【函数功能】 被叫线路替换
- **【参数】 HostLine 申请替换的线路
- PeerLine 被替换的线路
- ExtNum 申请替换线路的分机号
- **【返回值】
- *****************************************************************/
- bool CSubSession::replace( CRDRID HostLine, CRDRID PeerLine, UINT ExtNum )
- {
- // 线路替换
- m_pParent->removeLine(PeerLine, CALL_PARTY_PENDING);
- if(!m_pParent->insertLine(HostLine, m_Id, TRUE))
- return false;
- // 信息替换
- m_pInfo->nAssoLine = HostLine;
- sprintf_s(m_pInfo->szCalleeNum, _T("%lu"), ExtNum);
- sprintf_s(m_pInfo->szCallerNum, _T("%s"), CProxyShell::GetInstance().getProxy(PeerLine.toIntId())->callerNum());
- // 原线路挂机
- return CMC::GetInstance().dropCall(PeerLine, false);
- }
- /*****************************************************************
- **【函数名称】 OnPendingLineStatus
- **【函数功能】 待处理线路状态变化事件
- **【参数】 LineState 待处理线路当前状态
- **【返回值】
- *****************************************************************/
- void CSubSession::onPendingLineState( VIRTUAL_LINE_STATE LineState )
- {
- CProxyShell& Proxy = CProxyShell::GetInstance();
- switch(LineState)
- {
- case VIRTUAL_LINE_STATE_FREE:
- {
- _onDialCancel(); // 呼叫结束处理(模板方法)
- Proxy.onLineStateUpdated(m_pInfo->nHostLine, m_pParent->id(), m_Id, VIRTUAL_LINE_STATE_FREE);
- Proxy.onLineStateUpdated(m_pInfo->nAssoLine, m_pParent->id(), m_Id, VIRTUAL_LINE_STATE_FREE);
- }
- break;
- case VIRTUAL_LINE_STATE_RING_BACK:
- {
- _onDialRing(); // 呼叫回铃处理(模板方法)
- Proxy.onLineStateUpdated(m_pInfo->nHostLine, m_pParent->id(), m_Id, VIRTUAL_LINE_STATE_RING_BACK, m_pInfo->szCallerNum, m_pInfo->szCalleeNum);
- Proxy.onLineStateUpdated(m_pInfo->nAssoLine, m_pParent->id(), m_Id, VIRTUAL_LINE_STATE_RING_BACK, m_pInfo->szCallerNum, m_pInfo->szCalleeNum);
- }
- break;
- case VIRTUAL_LINE_STATE_ALERTING:
- {
- _onDialRing(); // 呼叫振铃处理(模板方法)
- Proxy.onLineStateUpdated(m_pInfo->nHostLine, m_pParent->id(), m_Id, VIRTUAL_LINE_STATE_RING_BACK, m_pInfo->szCallerNum, m_pInfo->szCalleeNum);
- Proxy.onLineStateUpdated(m_pInfo->nAssoLine, m_pParent->id(), m_Id, VIRTUAL_LINE_STATE_ALERTING, m_pInfo->szCallerNum, m_pInfo->szCalleeNum);
- }
- break;
- case VIRTUAL_LINE_STATE_TALKING:
- {
- _onDialOK(); // 呼叫通话处理(模板方法)
- Proxy.onLineStateUpdated(m_pInfo->nHostLine, m_pParent->id(), m_Id, VIRTUAL_LINE_STATE_TALKING, m_pInfo->szCallerNum, m_pInfo->szCalleeNum);
- Proxy.onLineStateUpdated(m_pInfo->nAssoLine, m_pParent->id(), m_Id, VIRTUAL_LINE_STATE_TALKING, m_pInfo->szCallerNum, m_pInfo->szCalleeNum);
- }
- break;
- case VIRTUAL_LINE_STATE_PROGRESSING:
- {
- _onDialProgressing(); // 呼叫进展处理(模板方法)
- Proxy.onLineStateUpdated(m_pInfo->nHostLine, m_pParent->id(), m_Id, VIRTUAL_LINE_STATE_RING_BACK, m_pInfo->szCallerNum, m_pInfo->szCalleeNum);
- Proxy.onLineStateUpdated(m_pInfo->nAssoLine, m_pParent->id(), m_Id, VIRTUAL_LINE_STATE_RING_BACK, m_pInfo->szCallerNum, m_pInfo->szCalleeNum);
- }
- break;
- } // end switch
- }
|