| | |
| | | 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) { |
| | |
| | | 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) { |
| | |
| | | } |
| | | |
| | | m_ids[index] = id; |
| | | return 0; |
| | | return (int)m_ids.size(); |
| | | } |
| | | |
| | | std::map<int, short>& CRecipeList::getIds() |
| | |
| | | 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; |
| | | } |
| | | |
| | | } |