多数据源中间件标准版1.0

IvrFlowMgr.cpp 3.6KB

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