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

IvrFlowMgr.cpp 3.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. #include "StdAfx.h"
  2. #include "IvrFlowMgr.h"
  3. #include "Config.h"
  4. #include "IvrFlow.h"
  5. #include "MsgCenter.h"
  6. #include "CellBase.h"
  7. #include "../Public/Auth/AuthMgr.h"
  8. CIvrFlowMgr::CIvrFlowMgr(void)
  9. {
  10. }
  11. CIvrFlowMgr::~CIvrFlowMgr(void)
  12. {
  13. __release();
  14. }
  15. /*****************************************************************
  16. **【函数名称】 __release
  17. **【函数功能】 释放资源
  18. **【参数】
  19. **【返回值】
  20. ****************************************************************/
  21. void CIvrFlowMgr::__release( void )
  22. {
  23. while(!m_FlowArray.IsEmpty())
  24. {
  25. delete m_FlowArray[0];
  26. m_FlowArray.RemoveAt(0);
  27. }
  28. }
  29. /*****************************************************************
  30. **【函数名称】 createFlow
  31. **【函数功能】 初始化流程
  32. **【参数】
  33. **【返回值】 创建流程数
  34. ****************************************************************/
  35. int CIvrFlowMgr::createFlow( void )
  36. {
  37. UINT FLowCount = CConfig::flowCount();
  38. #ifndef _DEBUG
  39. if(FLowCount > CAuthMgr::GetInstance().getValidIvrFlowCount())
  40. FLowCount = CAuthMgr::GetInstance().getValidIvrFlowCount();
  41. #endif
  42. for(UINT i = 0; i < FLowCount; ++i)
  43. {
  44. CIvrFlow* pFlow = new CIvrFlow(i);
  45. ASSERT(pFlow != NULL);
  46. if(pFlow != NULL)
  47. {
  48. m_FlowArray.Add(pFlow);
  49. CMsgCenter::GetInstance().pushMsg(IVR_MSG_FLOW_STATE_UPDAET, reinterpret_cast<const PARAM>(i));
  50. }
  51. }
  52. return m_FlowArray.GetCount();
  53. }
  54. /*****************************************************************
  55. **【函数名称】 GetFreeIvrFlow
  56. **【函数功能】 获取空闲流程
  57. **【参数】
  58. **【返回值】 空闲流程
  59. ****************************************************************/
  60. CIvrFlow* CIvrFlowMgr::getFreeFlow( void )
  61. {
  62. // 当前轮循到的索引
  63. static INT_PTR StaticPos = 0;
  64. INT_PTR FlowCount = m_FlowArray.GetCount();
  65. // 保证遍历一轮
  66. for(int i = 0; i < FlowCount; ++i)
  67. {
  68. CIvrFlow* pFlow = m_FlowArray[StaticPos];
  69. ASSERT(pFlow != NULL);
  70. // 保证POS是有效的
  71. if(++StaticPos >= FlowCount)
  72. StaticPos = 0;
  73. if(pFlow != NULL && pFlow->state() == IVR_FLOW_STATE_FREE)
  74. return pFlow;
  75. } // end if
  76. return NULL;
  77. }
  78. /*****************************************************************
  79. **【函数名称】 getFlow
  80. **【函数功能】 根据流程Id获取流程对象
  81. **【参数】 FlowId: 流程id
  82. **【返回值】
  83. ****************************************************************/
  84. CIvrFlow* CIvrFlowMgr::getFlow( int FlowId )
  85. {
  86. if(FlowId < 0 || FlowId >= m_FlowArray.GetCount())
  87. return NULL;
  88. return m_FlowArray[FlowId];
  89. }
  90. /*****************************************************************
  91. **【函数名称】 getFlowInfo
  92. **【函数功能】 根据流程Id获取流程信息
  93. **【参数】
  94. **【返回值】
  95. ****************************************************************/
  96. bool CIvrFlowMgr::getFlowInfo( Flow2Show& Info )
  97. {
  98. CIvrFlow *pFlow = NULL;
  99. pFlow = getFlow(Info.Id);
  100. if(pFlow != NULL)
  101. {
  102. Info.State = pFlow->state();
  103. CCellBase* pCell = pFlow->currentCell();
  104. if(pCell != NULL)
  105. Info.NodeNote = pCell->note();
  106. return true;
  107. }
  108. else return false;
  109. }
  110. /*****************************************************************
  111. **【函数名称】 onNetLinkUpdated
  112. **【函数功能】 响应网络连接成功或断开事件
  113. **【参数】 IsConnect:网络连接成功或断开
  114. **【返回值】
  115. ****************************************************************/
  116. void CIvrFlowMgr::onNetLinkUpdated( bool IsConnect )
  117. {
  118. for(INT_PTR i = 0; i < m_FlowArray.GetCount(); ++i)
  119. {
  120. CIvrFlow *pFlow = m_FlowArray[i];
  121. ASSERT(pFlow != NULL);
  122. if(pFlow != NULL)
  123. pFlow->onNetLinkUpdated(IsConnect);
  124. }
  125. }