升龙物业 老版本 ocx IPO, 加密狗 转值班电话

PduDataFormatOne.cpp 4.4KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163
  1. #include "StdAfx.h"
  2. #include "PduDataFormatOne.h"
  3. CPduDataFormatOne::CPduDataFormatOne(PDU_CMD_TYPE a_nCmdType)
  4. {
  5. m_nCmdType = a_nCmdType;
  6. ZeroMemory(m_pDataMemoArray, PDU_CMD_MAX_DATA_COUNT*sizeof(long)); // 初始化
  7. }
  8. CPduDataFormatOne::~CPduDataFormatOne(void)
  9. {
  10. for(int i=0; i<PDU_CMD_MAX_DATA_COUNT; i++)
  11. {
  12. if(m_pDataMemoArray[i] == NULL) break;
  13. delete m_pDataMemoArray[i];
  14. } // end for
  15. }
  16. /*****************************************************************
  17. **【函数名称】 InsertDataMemo
  18. **【函数功能】 添加一条数据描述
  19. **【参数】 nIndex 数据描述索引
  20. lpDataMemo 数据描述字符串
  21. **【返回值】
  22. ****************************************************************/
  23. void CPduDataFormatOne::InsertDataMemo(int nIndex, CHAR* lpDataString)
  24. {
  25. // 下标校验
  26. if(nIndex >= PDU_CMD_MAX_DATA_COUNT || m_pDataMemoArray[nIndex] != NULL)
  27. {
  28. ASSERT(FALSE);
  29. return;
  30. } // end if
  31. // 生成数据
  32. PduDataMemo* pDataMemo = new PduDataMemo;
  33. ZeroMemory(pDataMemo, sizeof(PduDataMemo));
  34. CHAR szSteps[] = "|";
  35. CHAR* lpNextToken = NULL;
  36. // 数据类型
  37. CHAR* lpToken = strtok_s(lpDataString, szSteps, &lpNextToken);
  38. if(lpToken == NULL) ASSERT(FALSE);
  39. sscanf_s(lpToken, "%d", &pDataMemo->nDataType);
  40. // 数据长度
  41. lpToken = strtok_s(NULL, szSteps, &lpNextToken);
  42. if(lpToken == NULL) ASSERT(FALSE);
  43. sscanf_s(lpToken, "%d", &pDataMemo->nDataLen);
  44. // 数据描述
  45. lpToken = strtok_s(NULL, szSteps, &lpNextToken);
  46. if(lpToken == NULL) ASSERT(FALSE);
  47. lstrcpy(pDataMemo->szExplain, lpToken);
  48. // 是否执行结果返回数据
  49. lpToken = strtok_s(NULL, szSteps, &lpNextToken);
  50. if(lpToken == NULL) ASSERT(FALSE);
  51. sscanf_s(lpToken, "%d", &pDataMemo->nIsExecReturn);
  52. // 初始化数据内容
  53. lstrcpy(pDataMemo->szValue, "");
  54. // 赋值
  55. m_pDataMemoArray[nIndex] = pDataMemo;
  56. }
  57. /*****************************************************************
  58. **【函数名称】 IncodeData
  59. **【函数功能】 打包数据串
  60. **【参数】
  61. **【返回值】 a_pData 打包后的数据内容
  62. USHORT 打包后的数据长度
  63. ****************************************************************/
  64. USHORT CPduDataFormatOne::IncodeData(CHAR* a_pData)
  65. {
  66. USHORT nDataLen = 0;
  67. for(int i=0; i<PDU_CMD_MAX_DATA_COUNT; i++)
  68. {
  69. if(m_pDataMemoArray[i] == NULL) break;
  70. // 打包数据
  71. if(i == 0)
  72. {
  73. lstrcpy(a_pData, m_pDataMemoArray[i]->szValue);
  74. }
  75. else
  76. {
  77. strcat_s(a_pData, PDU_MAX_DATA_LEN, m_pDataMemoArray[i]->szValue);
  78. } // end if
  79. strcat_s(a_pData, PDU_MAX_DATA_LEN, "\t");
  80. nDataLen = nDataLen + strlen(m_pDataMemoArray[i]->szValue) + 1;
  81. } // end for
  82. return nDataLen;
  83. }
  84. /*****************************************************************
  85. **【函数名称】 DecodeData
  86. **【函数功能】 解包数据
  87. **【参数】 a_pData 要解包的原始数据串
  88. **【返回值】 USHORT 解包后的数据字段个数
  89. ****************************************************************/
  90. USHORT CPduDataFormatOne::DecodeData(CHAR* a_pData)
  91. {
  92. int nCount = 0;
  93. CHAR* lpTop = a_pData;
  94. while(lpTop != NULL)
  95. {
  96. CHAR* lpNext = strstr(lpTop, "\t");
  97. if(lpNext == NULL) break;
  98. if(m_pDataMemoArray[nCount] == NULL) break;
  99. memcpy(m_pDataMemoArray[nCount]->szValue, lpTop, lpNext - lpTop);
  100. lpTop = lpNext + 1;
  101. nCount++;;
  102. } // end while
  103. return nCount;
  104. }
  105. /*****************************************************************
  106. **【函数名称】 GetData
  107. **【函数功能】 读取指定索引的数据
  108. **【参数】 a_nIndex 数据索引
  109. a_nDataType 数据类型
  110. **【返回值】 szData 数据内容
  111. 读取是否成功
  112. ****************************************************************/
  113. BOOL CPduDataFormatOne::GetData(int a_nIndex, int a_nDataType, CHAR szData[])
  114. {
  115. // 校验
  116. if(a_nIndex >= PDU_CMD_MAX_DATA_COUNT) return FALSE;
  117. if(m_pDataMemoArray[a_nIndex] == NULL) return FALSE;
  118. if(m_pDataMemoArray[a_nIndex]->nDataType != a_nDataType) return FALSE;
  119. // 返回数据
  120. lstrcpy(szData, m_pDataMemoArray[a_nIndex]->szValue);
  121. return TRUE;
  122. }
  123. /*****************************************************************
  124. **【函数名称】 SetData
  125. **【函数功能】 设置指定索引的数据
  126. **【参数】 a_nIndex 数据索引
  127. a_nDataType 数据类型
  128. szData 数据内容
  129. **【返回值】 写入是否成功
  130. ****************************************************************/
  131. BOOL CPduDataFormatOne::SetData(int a_nIndex, int a_nDataType, LPCTSTR szData)
  132. {
  133. // 校验
  134. if(a_nIndex >= PDU_CMD_MAX_DATA_COUNT) return FALSE;
  135. if(m_pDataMemoArray[a_nIndex] == NULL) return FALSE;
  136. if(m_pDataMemoArray[a_nIndex]->nDataType != a_nDataType) return FALSE;
  137. // 返回数据
  138. lstrcpy(m_pDataMemoArray[a_nIndex]->szValue, szData);
  139. return TRUE;
  140. }