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

ProxyExten.cpp 6.1KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199
  1. #include "StdAfx.h"
  2. #include "ProxyExten.h"
  3. #include "ProxyShell.h"
  4. #include "ReqBase.h"
  5. #include "SessionShell.h"
  6. CProxyExten::CProxyExten(CProxyShell* pParent, CRDRID DevId) : CVirtualProxy(pParent, DevId), m_ExtNum(DevId.ChanNo), m_IsHoldOn(false), m_RealDevId(DevId)
  7. {
  8. }
  9. CProxyExten::~CProxyExten(void)
  10. {
  11. // 通知业务逻辑线路被删除
  12. ASSERT(m_pParent != NULL);
  13. m_pParent->notifyDevResourceState(DEV_RES_TYPE_EXT, m_ExtNum, INNER_STATE_REMOVE);
  14. }
  15. /*****************************************************************
  16. **【函数名称】 __transVirtualState2OuterState
  17. **【函数功能】 映设虚拟线路状态到外部识别的状态
  18. **【参数】 State: 线路状态
  19. **【返回值】
  20. ****************************************************************/
  21. UINT CProxyExten::__transVirtualState2OuterState( VIRTUAL_LINE_STATE State ) const
  22. {
  23. switch(State)
  24. {
  25. case VIRTUAL_LINE_STATE_DISABLED: return INNER_STATE_DISABLED;
  26. case VIRTUAL_LINE_STATE_REMOVE: return INNER_STATE_REMOVE;
  27. case VIRTUAL_LINE_STATE_FREE: return INNER_STATE_FREE;
  28. case VIRTUAL_LINE_STATE_INIT: return INNER_STATE_INIT;
  29. case VIRTUAL_LINE_STATE_DIALING: return INNER_STATE_DIALING;
  30. case VIRTUAL_LINE_STATE_RING_BACK: return INNER_STATE_RING_BACK;
  31. case VIRTUAL_LINE_STATE_ALERTING: return INNER_STATE_ALERTING;
  32. case VIRTUAL_LINE_STATE_TALKING: return INNER_STATE_TALKING;
  33. default: ASSERT(FALSE);
  34. } // end switch
  35. return INNER_STATE_DISABLED;
  36. }
  37. /*****************************************************************
  38. **【函数名称】 _procLineState
  39. **【函数功能】 线路状态变化事件处理
  40. **【参数】 Call 主会话ID
  41. SubCall 子会话ID
  42. State 线路基本状态
  43. lpCallerNum 主叫号码
  44. lpCalleeNum 被叫号码
  45. **【返回值】
  46. ****************************************************************/
  47. void CProxyExten::_procLineState( long Call, long SubCall, VIRTUAL_LINE_STATE State, LPCTSTR lpCallerNum, LPCTSTR lpCalleeNum )
  48. {
  49. //TODO: do nothing
  50. }
  51. /*****************************************************************
  52. **【函数名称】 _notifyLineState
  53. **【函数功能】 通知上层逻辑线路状态变化事件
  54. **【参数】
  55. **【返回值】
  56. ****************************************************************/
  57. void CProxyExten::_notifyLineState( void )
  58. {
  59. // 通知业务逻辑线路状态变化事件
  60. ASSERT(m_pParent != NULL);
  61. m_pParent->notifyDevResourceState(DEV_RES_TYPE_EXT, m_ExtNum, __transVirtualState2OuterState(m_State), m_CallerNum, m_CalleeNum);
  62. }
  63. /*****************************************************************
  64. **【函数名称】 notifyLineInfo
  65. **【函数功能】 通知上层逻辑线路信息
  66. **【参数】
  67. **【返回值】
  68. ****************************************************************/
  69. void CProxyExten::notifyLineInfo( PDU_DEV_TYPE a_DestType, int a_DestId ) const
  70. {
  71. // 通知业务逻辑线路状态变化事件
  72. ASSERT(m_pParent != NULL);
  73. m_pParent->notifyResourceDetail(a_DestType, a_DestId, DEV_RES_TYPE_EXT, m_ExtNum);
  74. m_pParent->notifyDevResourceState(a_DestType, a_DestId, DEV_RES_TYPE_EXT, m_ExtNum, __transVirtualState2OuterState(m_State), m_CallerNum, m_CalleeNum);
  75. }
  76. /*****************************************************************
  77. **【函数名称】 notifyLineInfo
  78. **【函数功能】 通知上层逻辑线路信息
  79. **【参数】
  80. **【返回值】
  81. ****************************************************************/
  82. void CProxyExten::notifyLineInfo( void ) const
  83. {
  84. ASSERT(m_pParent != NULL);
  85. m_pParent->notifyResourceDetail(DEV_RES_TYPE_EXT, m_ExtNum);
  86. m_pParent->notifyDevResourceState(DEV_RES_TYPE_EXT, m_ExtNum, __transVirtualState2OuterState(m_State), m_CallerNum, m_CalleeNum);
  87. }
  88. /*****************************************************************
  89. **【函数名称】 onLineStateChanged
  90. **【函数功能】 线路状态变化事件处理
  91. **【参数】 nCall 主会话ID
  92. nSubCall 子会话ID
  93. nStatus 线路基本状态
  94. lpCallerNum 主叫号码
  95. lpCalleeNum 被叫号码
  96. **【返回值】
  97. ****************************************************************/
  98. void CProxyExten::onLineStateChanged( long Call, long SubCall, VIRTUAL_LINE_STATE State, LPCTSTR lpCallerNum, LPCTSTR lpCalleeNum )
  99. {
  100. // 子呼叫空闲状态过滤(只处理操作)
  101. if(m_pLineReq != NULL && SubCall != SESSION_INVALID_SUB_CALL && State == VIRTUAL_LINE_STATE_FREE)
  102. {
  103. m_pLineReq->onLineStateChanged(this, State, Call, SubCall, lpCallerNum, lpCalleeNum);
  104. return;
  105. } // end if
  106. // 处理线路状事件
  107. _procLineState(Call, SubCall, State, lpCallerNum, lpCalleeNum);
  108. // 保存呼叫信息
  109. m_State = State;
  110. m_CallerNum = lpCallerNum;
  111. m_CalleeNum = lpCalleeNum;
  112. if(State == VIRTUAL_LINE_STATE_FREE)
  113. {
  114. m_ActiveCallId = SESSION_INVALID_CALL;
  115. m_DevId = m_RealDevId;
  116. }
  117. else
  118. m_ActiveCallId = Call;
  119. // 委托操作执行
  120. if(m_pLineReq != NULL)
  121. m_pLineReq->onLineStateChanged(this, State, Call, SubCall, lpCallerNum, lpCalleeNum);
  122. // 通知业务逻辑线路状态变化事件
  123. _notifyLineState();
  124. }
  125. /*****************************************************************
  126. **【函数名称】 holdOn
  127. **【函数功能】 线路保持
  128. **【参数】
  129. **【返回值】
  130. ****************************************************************/
  131. bool CProxyExten::holdOn( void )
  132. {
  133. if(m_IsHoldOn)
  134. return false;
  135. if(CSessionShell::GetInstance().procReqMute(m_ActiveCallId, m_DevId, true))
  136. {
  137. m_IsHoldOn = true;
  138. // 通知业务逻辑线路状态变化事件
  139. UINT HoldOnState = __transVirtualState2OuterState(m_State);
  140. HoldOnState |= INNER_STATE_HELD;
  141. ASSERT(m_pParent != NULL);
  142. m_pParent->notifyDevResourceState(DEV_RES_TYPE_EXT, m_ExtNum, HoldOnState, m_CallerNum, m_CalleeNum);
  143. }
  144. return m_IsHoldOn;
  145. }
  146. /*****************************************************************
  147. **【函数名称】 takeBack
  148. **【函数功能】 保持接回
  149. **【参数】
  150. **【返回值】
  151. ****************************************************************/
  152. bool CProxyExten::takeBack( void )
  153. {
  154. if(!m_IsHoldOn)
  155. return false;
  156. if(CSessionShell::GetInstance().procReqMute(m_ActiveCallId, m_DevId, false))
  157. {
  158. m_IsHoldOn = false;
  159. // 通知业务逻辑线路状态变化事件
  160. ASSERT(m_pParent != NULL);
  161. m_pParent->notifyDevResourceState(DEV_RES_TYPE_EXT, m_ExtNum, __transVirtualState2OuterState(m_State), m_CallerNum, m_CalleeNum);
  162. }
  163. return !m_IsHoldOn;
  164. }
  165. /*****************************************************************
  166. **【函数名称】 isFree
  167. **【函数功能】 是否空闲
  168. **【参数】
  169. **【返回值】
  170. ****************************************************************/
  171. bool CProxyExten::isFree( void ) const
  172. {
  173. return isNull() && __super::isFree();
  174. }