MiddleWares_YiHe 郑州颐和医院随访系统中间件

LogicLineVoip.cpp 2.1KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. #include "StdAfx.h"
  2. #include "LogicLineVoip.h"
  3. #include "CallSession.h"
  4. #include "SessionHolder.h"
  5. #include "StatisticsMgr.h"
  6. CLogicLineVoip::CLogicLineVoip(UINT ResId) : CLogicLine(ResId), m_IsOnTrunkMode(false)
  7. {
  8. }
  9. CLogicLineVoip::~CLogicLineVoip(void)
  10. {
  11. }
  12. /*****************************************************************
  13. **【函数名称】 onLineStatusUpdated
  14. **【函数功能】 处理线路状态变化
  15. **【参数】 EvtInfo: 线路资源状态
  16. **【返回值】
  17. ****************************************************************/
  18. void CLogicLineVoip::onLineStatusUpdated( const EventResStatus &EvtInfo )
  19. {
  20. /***********************************************************************
  21. **由于VOIP通道的特殊性,其即可工作在分机模式下,又可工作在中继模式下。
  22. **故对其状态的变更要特殊处理。在中继模式下其处理方式和普通数字中继相同,
  23. **而在分机模式下其通道状态不再通知给统计和会话模块,而由其对应的分机线路
  24. **通知统计和会话模块,否则会造成重复统计和会话状态维护错误的问题
  25. *************************************************************************/
  26. if(m_LineStatus == EvtInfo.nState)
  27. return;
  28. switch(EvtInfo.nState)
  29. {
  30. case VOIP_EXT_STATE_DISABLED:
  31. case VOIP_EXT_STATE_FREE:
  32. case VOIP_EXT_STATE_INIT:
  33. case VOIP_EXT_STATE_DIALING:
  34. case VOIP_EXT_STATE_RING_BACK:
  35. case VOIP_EXT_STATE_ALERTING:
  36. case VOIP_EXT_STATE_TALKING:
  37. m_IsOnTrunkMode = false;
  38. break;
  39. case VOIP_TRUNK_STATE_DISABLED:
  40. case VOIP_TRUNK_STATE_FREE:
  41. case VOIP_TRUNK_STATE_DIALING:
  42. case VOIP_TRUNK_STATE_RING_BACK:
  43. case VOIP_TRUNK_STATE_ALERTING:
  44. case VOIP_TRUNK_STATE_TALKING:
  45. case VOIP_TRUNK_STATE_UNKNOWN:
  46. m_IsOnTrunkMode = true;
  47. break;
  48. default:
  49. ASSERT(FALSE);
  50. }
  51. // 保存线路信息
  52. m_LineStatus = EvtInfo.nState;
  53. m_CallerNum = EvtInfo.szCallerNum;
  54. m_CalleeNum = EvtInfo.szCalleeNum;
  55. ILogger::getInstance().log(LOG_CLASS_DEV, LOG_LEVEL_NORMAL, _T("{LogicLineVoip}: 线路状态, LineId = %lu,State=%d,IsOnTrunkMode=%d,CallId=%lu,Caller=%s,Callee=%s"), m_LineId, m_LineStatus, m_IsOnTrunkMode, m_CallId, m_CallerNum, m_CalleeNum );
  56. if(m_IsOnTrunkMode) // 此时表明VOIP通道工作在中继模式下
  57. {
  58. _reportLineStatus(); // 统计线路状态变化
  59. CSessionHolder::GetInstance().onLineStatusUpdated(this);
  60. }
  61. }