中间件底层,websocket

IvrFlowMgr.cpp 3.6KB

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