SourceCode/Bond/Servo/CRecipeList.cpp
@@ -26,7 +26,7 @@
      return m_nUnitNo;
   }
   int CRecipeList::addRecipePacket(int totalGroup, int currentGroup, const char* pszData, size_t size)
   int CRecipeList::addRecipePacket(int totalCount, int totalGroup, int currentGroup, const char* pszData, size_t size)
   {
      if (m_nToatlGroupCount == 0) m_nToatlGroupCount = totalGroup;
      if (m_nToatlGroupCount != totalGroup) {
@@ -47,7 +47,9 @@
      for (int i = 0; i < size; i += 4) {
         int index = CToolUnits::toInt16(&pszData[i]);
         short id = CToolUnits::toInt16(&pszData[i + 2]);
         addRecipe(index, id);
         if (index != 0 && id != 0) {
            addRecipe(index, id);
         }
      }
      if (m_nCurrentGroupCount == m_nToatlGroupCount) {
@@ -67,7 +69,7 @@
      }
      m_ids[index] = id;
      return 0;
      return (int)m_ids.size();
   }
   std::map<int, short>& CRecipeList::getIds()
@@ -75,10 +77,47 @@
      return m_ids;
   }
   std::unordered_map<short, std::vector<uint8_t>>& CRecipeList::getParamsRawData()
   {
      return m_paramsRawData;
   }
   void CRecipeList::reset()
   {
      m_nToatlGroupCount = 0;
      m_nCurrentGroupCount = 0;
      m_ids.clear();
      m_paramsRawData.clear();
   }
   int CRecipeList::addParamsPacket(int totalCount, int totalGroup, int currentGroup,
      short unitId, short recipeId,
      const char* pszData, size_t size)
   {
      if (m_nToatlGroupCount == 0) m_nToatlGroupCount = totalGroup;
      if (m_nToatlGroupCount != totalGroup) {
         reset();
         return MRLRC_GROUP_COUNT_NG;
      }
      if (currentGroup == 0) {
         reset();
      }
      if (m_nCurrentGroupCount + 1 > currentGroup) {
         return MRLRC_DUPLICATION_GROUP_COUNT_NG;
      }
      if (m_nCurrentGroupCount + 1 < currentGroup) {
         return ORDER_BY_GROUP_COUNT_NG;
      }
      m_nCurrentGroupCount++;
      m_paramsRawData[recipeId].insert(m_paramsRawData[recipeId].end(), (uint8_t*)(pszData), (uint8_t*)(pszData) + size);
      if (m_nCurrentGroupCount == m_nToatlGroupCount) {
         // 解释数据就交给应用层吧
         return MRLRC_CURRENT_RECIPE_COMPLETE;
      }
      return MRLRC_CONTINUE;
   }
}