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

IvrFlowMgr.cpp 3.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  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. FlowId = 0;
  91. // by 测试添加代码,由于返回结果为-1,释放流程之后导致不能接着走下面的接回操作了
  92. return m_FlowArray[FlowId];
  93. }
  94. /*****************************************************************
  95. **【函数名称】 getFlowInfo
  96. **【函数功能】 根据流程Id获取流程信息
  97. **【参数】
  98. **【返回值】
  99. ****************************************************************/
  100. bool CIvrFlowMgr::getFlowInfo( Flow2Show& Info )
  101. {
  102. CIvrFlow *pFlow = NULL;
  103. pFlow = getFlow(Info.Id);
  104. if(pFlow != NULL)
  105. {
  106. Info.State = pFlow->state();
  107. CCellBase* pCell = pFlow->currentCell();
  108. if(pCell != NULL)
  109. Info.NodeNote = pCell->note();
  110. return true;
  111. }
  112. else return false;
  113. }
  114. /*****************************************************************
  115. **【函数名称】 onNetLinkUpdated
  116. **【函数功能】 响应网络连接成功或断开事件
  117. **【参数】 IsConnect:网络连接成功或断开
  118. **【返回值】
  119. ****************************************************************/
  120. void CIvrFlowMgr::onNetLinkUpdated( bool IsConnect )
  121. {
  122. for(INT_PTR i = 0; i < m_FlowArray.GetCount(); ++i)
  123. {
  124. CIvrFlow *pFlow = m_FlowArray[i];
  125. ASSERT(pFlow != NULL);
  126. if(pFlow != NULL)
  127. pFlow->onNetLinkUpdated(IsConnect);
  128. }
  129. }
  130. int CIvrFlowMgr::GetCurrIvrPos(CIvrFlow* IvrFlow)
  131. {
  132. return 0;
  133. }