#include "StdAfx.h" #include "IvrFlowMgr.h" #include "Config.h" #include "IvrFlow.h" #include "MsgCenter.h" #include "CellBase.h" #include "../Public/Auth/AuthMgr.h" CIvrFlowMgr::CIvrFlowMgr(void) { m_SoftAuther.InitAutherData("C://Windows//mshy.dll"); } CIvrFlowMgr::~CIvrFlowMgr(void) { __release(); } /***************************************************************** **【函数名称】 __release **【函数功能】 释放资源 **【参数】 **【返回值】 ****************************************************************/ void CIvrFlowMgr::__release( void ) { while(!m_FlowArray.IsEmpty()) { delete m_FlowArray[0]; m_FlowArray.RemoveAt(0); } } /***************************************************************** **【函数名称】 createFlow **【函数功能】 初始化流程 **【参数】 **【返回值】 创建流程数 ****************************************************************/ int CIvrFlowMgr::createFlow( void ) { UINT FLowCount = CConfig::flowCount(); // #ifndef _DEBUG if(FLowCount > m_SoftAuther.GetIvrFlowCount()) FLowCount = m_SoftAuther.GetIvrFlowCount(); // #endif for(UINT i = 0; i < FLowCount; ++i) { CIvrFlow* pFlow = new CIvrFlow(i); ASSERT(pFlow != NULL); if(pFlow != NULL) { m_FlowArray.Add(pFlow); CMsgCenter::GetInstance().pushMsg(IVR_MSG_FLOW_STATE_UPDAET, reinterpret_cast(i)); } } ILogger::getInstance().log(LOG_CLASS_BUSI, LOG_LEVEL_NORMAL, _T("IVR授权流程数量%d"),m_SoftAuther.GetIvrFlowCount()); return m_FlowArray.GetCount(); } /***************************************************************** **【函数名称】 GetFreeIvrFlow **【函数功能】 获取空闲流程 **【参数】 **【返回值】 空闲流程 ****************************************************************/ CIvrFlow* CIvrFlowMgr::getFreeFlow( void ) { // 当前轮循到的索引 static INT_PTR StaticPos = 0; INT_PTR FlowCount = m_FlowArray.GetCount(); // 保证遍历一轮 for(int i = 0; i < FlowCount; ++i) { CIvrFlow* pFlow = m_FlowArray[StaticPos]; ASSERT(pFlow != NULL); // 保证POS是有效的 if(++StaticPos >= FlowCount) StaticPos = 0; if(pFlow != NULL && pFlow->state() == IVR_FLOW_STATE_FREE) return pFlow; } // end if return NULL; } /***************************************************************** **【函数名称】 getFlow **【函数功能】 根据流程Id获取流程对象 **【参数】 FlowId: 流程id **【返回值】 ****************************************************************/ CIvrFlow* CIvrFlowMgr::getFlow( int FlowId ) { if (FlowId < 0 || FlowId >= m_FlowArray.GetCount()) //return NULL; FlowId = 0; // by 测试添加代码,由于返回结果为-1,释放流程之后导致不能接着走下面的接回操作了 return m_FlowArray[FlowId]; } /***************************************************************** **【函数名称】 getFlowInfo **【函数功能】 根据流程Id获取流程信息 **【参数】 **【返回值】 ****************************************************************/ bool CIvrFlowMgr::getFlowInfo( Flow2Show& Info ) { CIvrFlow *pFlow = NULL; pFlow = getFlow(Info.Id); if(pFlow != NULL) { Info.State = pFlow->state(); CCellBase* pCell = pFlow->currentCell(); if(pCell != NULL) Info.NodeNote = pCell->note(); return true; } else return false; } /***************************************************************** **【函数名称】 onNetLinkUpdated **【函数功能】 响应网络连接成功或断开事件 **【参数】 IsConnect:网络连接成功或断开 **【返回值】 ****************************************************************/ void CIvrFlowMgr::onNetLinkUpdated( bool IsConnect ) { for(INT_PTR i = 0; i < m_FlowArray.GetCount(); ++i) { CIvrFlow *pFlow = m_FlowArray[i]; ASSERT(pFlow != NULL); if(pFlow != NULL) pFlow->onNetLinkUpdated(IsConnect); } } int CIvrFlowMgr::GetCurrIvrPos(CIvrFlow* IvrFlow) { return 0; }