中间件底层,websocket

CellDefineVar.cpp 4.2KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187
  1. #include "StdAfx.h"
  2. #include "CellDefineVar.h"
  3. #include "IvrFlow.h"
  4. #include "FlowDataProvider.h"
  5. IMPLEMENT_CELL_AUTOCREATE(CCellDefineVar, CELL_NAME_DEFINE_VAR)
  6. CCellDefineVar::CCellDefineVar(void) : m_NextPos(0)
  7. {
  8. }
  9. CCellDefineVar::CCellDefineVar( CCellDefineVar & cellDefineVar ) : CCellBase(cellDefineVar)
  10. {
  11. m_NextPos = cellDefineVar.m_NextPos;
  12. POSITION pos = cellDefineVar.m_VarList.GetHeadPosition();
  13. while(pos != NULL)
  14. {
  15. VarInfo *pVarInfo = cellDefineVar.m_VarList.GetNext(pos);
  16. ASSERT(pVarInfo != NULL);
  17. VarInfo *pVarInfoTmp = new VarInfo(*pVarInfo);
  18. ASSERT(pVarInfoTmp != NULL);
  19. m_VarList.AddTail(pVarInfoTmp);
  20. }
  21. }
  22. CCellDefineVar::~CCellDefineVar(void)
  23. {
  24. __release();
  25. }
  26. /*****************************************************************
  27. **【函数名称】 __release
  28. **【函数功能】 释放资源
  29. **【参数】
  30. **【返回值】
  31. ****************************************************************/
  32. void CCellDefineVar::__release( void )
  33. {
  34. VarInfo* pVarInfo = NULL;
  35. while (!m_VarList.IsEmpty())
  36. {
  37. pVarInfo = m_VarList.RemoveHead();
  38. delete pVarInfo;
  39. pVarInfo = NULL;
  40. }
  41. }
  42. /*****************************************************************
  43. **【函数名称】 addVar
  44. **【函数功能】 添加变量接口
  45. **【参数】 VarType:变量类型
  46. VarName:变量名
  47. VarVal:变量值
  48. **【返回值】
  49. ****************************************************************/
  50. void CCellDefineVar::addVar( int VarType, const CString& VarName, const CString& VarVal )
  51. {
  52. VarInfo *pVarInfo = new VarInfo(VarType, VarName, VarVal);
  53. ASSERT(pVarInfo != NULL);
  54. if(pVarInfo == NULL)
  55. {
  56. CString Info;
  57. _getCellInfo(Info);
  58. ILogger::getInstance().log(LOG_CLASS_BUSI, LOG_LEVEL_WARNING, _T("{Cell}: 执行[%s]时创建变量结构失败"), Info);
  59. }
  60. else
  61. {
  62. m_VarList.AddTail(pVarInfo);
  63. }
  64. }
  65. /*****************************************************************
  66. **【函数名称】 Operate
  67. **【函数功能】 节点执行函数
  68. **【参数】
  69. **【返回值】 下一个节点编号
  70. ****************************************************************/
  71. int CCellDefineVar::operate( void )
  72. {
  73. if(m_pIvrFlow == NULL)
  74. return CELL_OP_ERROR;
  75. CString Info;
  76. _getCellInfo(Info);
  77. ILogger::getInstance().log(LOG_CLASS_BUSI, LOG_LEVEL_NORMAL, _T("{Cell}: 开始执行[%s]"), Info);
  78. POSITION pos = m_VarList.GetHeadPosition();
  79. while(pos != NULL)
  80. {
  81. VarInfo *pVarInfo = m_VarList.GetNext(pos);
  82. ASSERT(pVarInfo != NULL);
  83. CString strVarValue = "";
  84. if(pVarInfo->nVarType == CELL_DATA_VAR)
  85. {
  86. if(!m_pIvrFlow->findVarValue(pVarInfo->szVarValue, strVarValue))
  87. ILogger::getInstance().log(LOG_CLASS_BUSI, LOG_LEVEL_WARNING, _T("{Cell}: 执行[%s]出错,变量[%s]未找到对应值"), Info, pVarInfo->szVarValue);
  88. }
  89. else
  90. {
  91. strVarValue = pVarInfo->szVarValue;
  92. }
  93. m_pIvrFlow->addVar(pVarInfo->szVarName, strVarValue);
  94. }
  95. return m_NextPos;
  96. }
  97. /*****************************************************************
  98. **【函数名称】 copy
  99. **【函数功能】 拷贝自身
  100. **【参数】
  101. **【返回值】 拷贝副本
  102. ****************************************************************/
  103. CCellBase * CCellDefineVar::copy( void )
  104. {
  105. CCellBase * pCellBase = new CCellDefineVar(*this);
  106. return pCellBase;
  107. }
  108. /*****************************************************************
  109. **【函数名称】 fillData
  110. **【函数功能】 节点解析,填充数据
  111. **【参数】 Provider:数据提供器
  112. **【返回值】 成功true,失败false
  113. ****************************************************************/
  114. bool CCellDefineVar::fillData( IFlowDataProvider& Provider )
  115. {
  116. CString Data;
  117. do
  118. {
  119. if(!Provider.getData(CELL_ATTRIBUTE_POS, Data))
  120. {
  121. Data = _T("节点号");
  122. break;
  123. }
  124. else
  125. {
  126. sscanf_s(Data, _T("%d"), &m_Pos);
  127. if(m_Pos < 1)
  128. {
  129. Data = _T("节点号");
  130. break;
  131. }
  132. }
  133. if(!Provider.getData(CELL_ATTRIBUTE_NEXT, Data))
  134. {
  135. Data = _T("跳转节点");
  136. break;
  137. }
  138. else
  139. {
  140. sscanf_s(Data, _T("%d"), &m_NextPos);
  141. if(m_NextPos < 0)
  142. {
  143. Data = _T("跳转节点");
  144. break;
  145. }
  146. }
  147. Data.Format(_T("%s[@%s='%d']/%s"), XPATH_CELL, CELL_ATTRIBUTE_POS, m_Pos, FLOW_SUB_NODE_DEF_VAR);
  148. if(!Provider.getFlowDefVar(Data, *this))
  149. {
  150. Data = _T("定义变量");
  151. break;
  152. }
  153. Provider.getData(CELL_ATTRIBUTE_NOTE, m_Note);
  154. return true;
  155. } while (false);
  156. ILogger::getInstance().log(LOG_CLASS_BUSI, LOG_LEVEL_ERROR, _T("{Cell}: 节点[%s]解析失败, '%s'错误"), CELL_NAME_DEFINE_VAR, Data);
  157. return false;
  158. }