中间件底层,websocket

ExtenCtrl.cpp 4.0KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167
  1. #include "StdAfx.h"
  2. #include "ExtenCtrl.h"
  3. #include "Exten.h"
  4. CExtenCtrl::CExtenCtrl(void)
  5. {
  6. }
  7. CExtenCtrl::~CExtenCtrl(void)
  8. {
  9. }
  10. /*****************************************************************
  11. **【函数名称】 removeExten
  12. **【函数功能】 删除所有分机
  13. **【参数】
  14. **【返回值】
  15. ****************************************************************/
  16. void CExtenCtrl::removeExten( void )
  17. {
  18. // 清除所有分机
  19. POSITION pos = m_ExtenMap.GetStartPosition();
  20. while(pos != NULL)
  21. {
  22. UINT ExtId = 0;
  23. CExten* pExt = NULL;
  24. m_ExtenMap.GetNextAssoc(pos, ExtId, pExt);
  25. ASSERT(pExt != NULL);
  26. pExt->release();
  27. delete pExt;
  28. pExt = NULL;
  29. } // end while
  30. m_ExtenMap.RemoveAll();
  31. }
  32. /*****************************************************************
  33. **【函数名称】 removeExten
  34. **【函数功能】 清除指定分机
  35. **【参数】 a_Exten: 分机ID
  36. **【返回值】
  37. ****************************************************************/
  38. void CExtenCtrl::removeExten( UINT a_Exten )
  39. {
  40. CExten* pExt = NULL;
  41. // 查找是否存在当前分机
  42. if(m_ExtenMap.Lookup(a_Exten, pExt))
  43. {
  44. pExt->release();
  45. m_ExtenMap.RemoveKey(a_Exten);
  46. delete pExt;
  47. pExt = NULL;
  48. } // end if
  49. }
  50. /*****************************************************************
  51. **【函数名称】 onExtenStateUpdated
  52. **【函数功能】 分机状态变化事件处理
  53. **【参数】 a_pCmd: PDU命令内容
  54. **【返回值】
  55. ****************************************************************/
  56. void CExtenCtrl::onExtenStateUpdated( CPduEntity* a_pCmd )
  57. {
  58. CExten* pExt = NULL;
  59. UINT ExtId = a_pCmd->GetDataUInt(0);
  60. // 查找是否存在当前分机
  61. if(!m_ExtenMap.Lookup(ExtId, pExt))
  62. {
  63. pExt = new CExten(ExtId);
  64. m_ExtenMap.SetAt(ExtId, pExt);
  65. } // end if
  66. // 刷新状态
  67. pExt->setState(a_pCmd);
  68. }
  69. /*****************************************************************
  70. **【函数名称】 getExten
  71. **【函数功能】 获取指定分机
  72. **【参数】 a_Exten: 要查找的分机号
  73. **【返回值】
  74. ****************************************************************/
  75. CExten* CExtenCtrl::getExten( UINT a_Exten )
  76. {
  77. CExten* pPhoneExt = NULL;
  78. m_ExtenMap.Lookup(a_Exten, pPhoneExt);
  79. return pPhoneExt;
  80. }
  81. /*****************************************************************
  82. **【函数名称】 isExtenExisted
  83. **【函数功能】 指定的分机是否存在
  84. **【参数】 a_Exten: 要查找的分机号
  85. **【返回值】
  86. ****************************************************************/
  87. bool CExtenCtrl::isExtenExisted( UINT a_Exten )
  88. {
  89. return getExten(a_Exten) != NULL;
  90. }
  91. /*****************************************************************
  92. **【函数名称】 isExtenUsed
  93. **【函数功能】 指定的分机是否已被占用
  94. **【参数】 a_Exten: 要查找的分机号
  95. **【返回值】
  96. ****************************************************************/
  97. bool CExtenCtrl::isExtenUsed( UINT a_Exten )
  98. {
  99. CExten* pPhoneExt = NULL;
  100. m_ExtenMap.Lookup(a_Exten, pPhoneExt);
  101. ASSERT(pPhoneExt != NULL);
  102. return pPhoneExt->assoAgent() == 0 ? false : true;
  103. }
  104. /*****************************************************************
  105. **【函数名称】 setAssoAgent
  106. **【函数功能】 设置分机关联的座席
  107. **【参数】
  108. **【返回值】
  109. ****************************************************************/
  110. void CExtenCtrl::setAssoAgent( UINT a_Exten, UINT a_AgentId )
  111. {
  112. CExten* pExt = NULL;
  113. if(m_ExtenMap.Lookup(a_Exten, pExt))
  114. pExt->setAssoAgent(a_AgentId);
  115. }
  116. /*****************************************************************
  117. **【函数名称】 getAssoAgent
  118. **【函数功能】 查找关联的座席工号
  119. **【参数】 a_Exten: 要查找的分机号
  120. **【返回值】 当前分机关联的座席工号,0 -> 未关联座席
  121. ****************************************************************/
  122. UINT CExtenCtrl::getAssoAgent( UINT a_Exten )
  123. {
  124. CExten* pExt = NULL;
  125. if(!m_ExtenMap.Lookup(a_Exten, pExt))
  126. return 0;
  127. return pExt->assoAgent();
  128. }
  129. /*****************************************************************
  130. **【函数名称】 getExtenState
  131. **【函数功能】 得到指定分机的当前状态
  132. **【参数】
  133. **【返回值】
  134. ****************************************************************/
  135. INNER_STATE CExtenCtrl::getExtenState( UINT a_Exten )
  136. {
  137. CExten* pExt = NULL;
  138. m_ExtenMap.Lookup(a_Exten, pExt);
  139. if(pExt != NULL)
  140. return pExt->state();
  141. else
  142. return INNER_STATE_DISABLED;
  143. }