升龙物业 老版本 ocx IPO, 加密狗 转值班电话

ConsultSession.cpp 3.4KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. #include "StdAfx.h"
  2. #include "ConsultSession.h"
  3. #include "CallSession.h"
  4. #include "ProxyShell.h"
  5. #include "MC.h"
  6. CConsultSession::CConsultSession(CCallSession* pParent, long SubId, PendingCallInfo* pInfo) : CSubSession(pParent, SubId, pInfo)
  7. {
  8. m_PeerLineId = pInfo->nAssoLine;
  9. m_IsConnected = false;
  10. m_IsPlayTone = false;
  11. }
  12. CConsultSession::~CConsultSession(void)
  13. {
  14. }
  15. /*****************************************************************
  16. **【函数名称】 _onDialCancel
  17. **【函数功能】 呼叫取消处理
  18. **【参数】
  19. **【返回值】
  20. *****************************************************************/
  21. void CConsultSession::_onDialCancel( void )
  22. {
  23. // 停止回铃音播放
  24. if(m_IsPlayTone)
  25. CMC::GetInstance().playTone(m_pInfo->nHostLine, CHANNEL_TONE_NULL);
  26. // 呼叫成功后被叫端挂机
  27. if(m_IsConnected)
  28. {
  29. // 主控线路和被叫线路的断开通话连接
  30. CMC::GetInstance().bridgeDevice(m_pInfo->nHostLine, m_pInfo->nAssoLine, false);
  31. } // end if
  32. // 原通话线路取消静音
  33. m_pParent->lineMute(m_pInfo->nHostLine, false);
  34. // 主控线路状态修正
  35. if(m_pParent->isExist(m_pInfo->nHostLine, m_HostLineParty))
  36. {
  37. CProxyShell::GetInstance().onLineStateUpdated(m_pInfo->nHostLine, m_pParent->id(), SESSION_INVALID_SUB_CALL,
  38. (VIRTUAL_LINE_STATE)m_pInfo->nHostLineStatus, m_pInfo->szPreCallerNum, m_pInfo->szPreCalleeNum);
  39. } // end if
  40. }
  41. /*****************************************************************
  42. **【函数名称】 OnDialOK
  43. **【函数功能】 呼叫成功后续处理
  44. **【参数】
  45. **【返回值】
  46. *****************************************************************/
  47. void CConsultSession::_onDialOK( void )
  48. {
  49. // 停止回铃音播放
  50. if(m_IsPlayTone)
  51. CMC::GetInstance().playTone(m_pInfo->nHostLine, CHANNEL_TONE_NULL);
  52. // 已应答呼叫标志
  53. m_IsConnected = true;
  54. // 建立主控线路和被叫线路的通话连接
  55. CMC::GetInstance().bridgeDevice(m_pInfo->nHostLine, m_pInfo->nAssoLine, true);
  56. }
  57. /*****************************************************************
  58. **【函数名称】 _onDialing
  59. **【函数功能】 呼叫进展处理
  60. **【参数】
  61. **【返回值】
  62. *****************************************************************/
  63. void CConsultSession::_onDialRing( void )
  64. {
  65. m_IsPlayTone = true;
  66. //对原通话主控线路执行回铃音
  67. CMC::GetInstance().playTone(m_pInfo->nHostLine, CHANNEL_TONE_RINGBACK);
  68. // 对原通话执行静音操作
  69. m_pParent->lineMute(m_pInfo->nHostLine, true);
  70. }
  71. /*****************************************************************
  72. **【函数名称】 resume
  73. **【函数功能】 操作暂停后继续处理
  74. **【参数】 Type 操作类型
  75. **【返回值】
  76. *****************************************************************/
  77. bool CConsultSession::resume( UINT Type )
  78. {
  79. // 原通话的对端线路停止放音
  80. CMC::GetInstance().playStop(m_PeerLineId);
  81. // 原通话线路取消静音
  82. m_pParent->lineMute(m_pInfo->nHostLine, false);
  83. // 转换会话模式
  84. if(Type == 0) // 转移呼叫
  85. {
  86. // 主控线路和被叫线路的断开通话连接
  87. CMC::GetInstance().bridgeDevice(m_pInfo->nHostLine, m_pInfo->nAssoLine, false);
  88. // 主会话中线路替换
  89. m_pParent->removeLine(m_pInfo->nAssoLine, CALL_PARTY_PENDING);
  90. m_pParent->removeLine(m_pInfo->nHostLine, m_HostLineParty);
  91. m_pParent->insertLine(m_pInfo->nAssoLine, m_HostLineParty, true);
  92. // 主控线路挂机
  93. CMC::GetInstance().dropCall(m_pInfo->nHostLine, true);
  94. }
  95. else // 会议呼叫
  96. {
  97. // 主会话转换成会议
  98. m_pParent->trans2Meeting(m_pInfo->nHostLine);
  99. // 被叫线路职责转换
  100. m_pParent->removeLine(m_pInfo->nAssoLine, CALL_PARTY_PENDING);
  101. m_pParent->insertLine(m_pInfo->nAssoLine, CALL_PARTY_MEETING, true);
  102. } // end if
  103. return true;
  104. }