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

SubSession.cpp 4.0KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. #include "StdAfx.h"
  2. #include "SubSession.h"
  3. #include "ControlShell.h"
  4. #include "CallSession.h"
  5. #include "VirtualProxy.h"
  6. #include "ProxyShell.h"
  7. #include "MC.h"
  8. CSubSession::CSubSession(CCallSession* pParent, long SubId, PendingCallInfo* pInfo) : m_pParent(pParent), m_Id(SubId)
  9. {
  10. m_HostLineParty = CALL_PARTY_UNKNOWN;
  11. m_pInfo = new PendingCallInfo;
  12. ASSERT(m_pInfo != NULL);
  13. memcpy(m_pInfo, pInfo, sizeof(PendingCallInfo));
  14. }
  15. CSubSession::~CSubSession(void)
  16. {
  17. delete m_pInfo;
  18. }
  19. /*****************************************************************
  20. **【函数名称】 DoBegin
  21. **【函数功能】 操作启动
  22. **【参数】 nHostLineParty 操作主控线路在主会话中的职责
  23. **【返回值】
  24. *****************************************************************/
  25. bool CSubSession::begin( CALL_PARTY_TYPE HostLineParty )
  26. {
  27. // 保存呼叫信息
  28. m_HostLineParty = HostLineParty;
  29. // 启动呼叫
  30. return CMC::GetInstance().dial(m_pInfo->nAssoLine, m_pInfo->szCalleeNum, m_pInfo->szCallerNum, m_pInfo->nSipAccountId);
  31. }
  32. /*****************************************************************
  33. **【函数名称】 DoReplace
  34. **【函数功能】 被叫线路替换
  35. **【参数】 HostLine 申请替换的线路
  36. PeerLine 被替换的线路
  37. ExtNum 申请替换线路的分机号
  38. **【返回值】
  39. *****************************************************************/
  40. bool CSubSession::replace( CRDRID HostLine, CRDRID PeerLine, UINT ExtNum )
  41. {
  42. // 线路替换
  43. m_pParent->removeLine(PeerLine, CALL_PARTY_PENDING);
  44. if(!m_pParent->insertLine(HostLine, m_Id, TRUE))
  45. return false;
  46. // 信息替换
  47. m_pInfo->nAssoLine = HostLine;
  48. sprintf_s(m_pInfo->szCalleeNum, _T("%lu"), ExtNum);
  49. sprintf_s(m_pInfo->szCallerNum, _T("%s"), CProxyShell::GetInstance().getProxy(PeerLine.toIntId())->callerNum());
  50. // 原线路挂机
  51. return CMC::GetInstance().dropCall(PeerLine, false);
  52. }
  53. /*****************************************************************
  54. **【函数名称】 OnPendingLineStatus
  55. **【函数功能】 待处理线路状态变化事件
  56. **【参数】 LineState 待处理线路当前状态
  57. **【返回值】
  58. *****************************************************************/
  59. void CSubSession::onPendingLineState( VIRTUAL_LINE_STATE LineState )
  60. {
  61. CProxyShell& Proxy = CProxyShell::GetInstance();
  62. switch(LineState)
  63. {
  64. case VIRTUAL_LINE_STATE_FREE:
  65. {
  66. _onDialCancel(); // 呼叫结束处理(模板方法)
  67. Proxy.onLineStateUpdated(m_pInfo->nHostLine, m_pParent->id(), m_Id, VIRTUAL_LINE_STATE_FREE);
  68. Proxy.onLineStateUpdated(m_pInfo->nAssoLine, m_pParent->id(), m_Id, VIRTUAL_LINE_STATE_FREE);
  69. }
  70. break;
  71. case VIRTUAL_LINE_STATE_RING_BACK:
  72. {
  73. _onDialRing(); // 呼叫回铃处理(模板方法)
  74. Proxy.onLineStateUpdated(m_pInfo->nHostLine, m_pParent->id(), m_Id, VIRTUAL_LINE_STATE_RING_BACK, m_pInfo->szCallerNum, m_pInfo->szCalleeNum);
  75. Proxy.onLineStateUpdated(m_pInfo->nAssoLine, m_pParent->id(), m_Id, VIRTUAL_LINE_STATE_RING_BACK, m_pInfo->szCallerNum, m_pInfo->szCalleeNum);
  76. }
  77. break;
  78. case VIRTUAL_LINE_STATE_ALERTING:
  79. {
  80. _onDialRing(); // 呼叫振铃处理(模板方法)
  81. Proxy.onLineStateUpdated(m_pInfo->nHostLine, m_pParent->id(), m_Id, VIRTUAL_LINE_STATE_RING_BACK, m_pInfo->szCallerNum, m_pInfo->szCalleeNum);
  82. Proxy.onLineStateUpdated(m_pInfo->nAssoLine, m_pParent->id(), m_Id, VIRTUAL_LINE_STATE_ALERTING, m_pInfo->szCallerNum, m_pInfo->szCalleeNum);
  83. }
  84. break;
  85. case VIRTUAL_LINE_STATE_TALKING:
  86. {
  87. _onDialOK(); // 呼叫通话处理(模板方法)
  88. Proxy.onLineStateUpdated(m_pInfo->nHostLine, m_pParent->id(), m_Id, VIRTUAL_LINE_STATE_TALKING, m_pInfo->szCallerNum, m_pInfo->szCalleeNum);
  89. Proxy.onLineStateUpdated(m_pInfo->nAssoLine, m_pParent->id(), m_Id, VIRTUAL_LINE_STATE_TALKING, m_pInfo->szCallerNum, m_pInfo->szCalleeNum);
  90. }
  91. break;
  92. case VIRTUAL_LINE_STATE_PROGRESSING:
  93. {
  94. _onDialProgressing(); // 呼叫进展处理(模板方法)
  95. Proxy.onLineStateUpdated(m_pInfo->nHostLine, m_pParent->id(), m_Id, VIRTUAL_LINE_STATE_RING_BACK, m_pInfo->szCallerNum, m_pInfo->szCalleeNum);
  96. Proxy.onLineStateUpdated(m_pInfo->nAssoLine, m_pParent->id(), m_Id, VIRTUAL_LINE_STATE_RING_BACK, m_pInfo->szCallerNum, m_pInfo->szCalleeNum);
  97. }
  98. break;
  99. } // end switch
  100. }