| | |
| | | m_hWorkStop = nullptr; |
| | | m_hWorkThreadHandle = nullptr; |
| | | m_nTimeoutCount = 0; |
| | | m_onSyncingStateChanged = nullptr; |
| | | ::InitializeCriticalSection(&m_cs); |
| | | } |
| | | |
| | |
| | | m_nTimeoutCount = 0; |
| | | unlock(); |
| | | |
| | | if (m_onSyncingStateChanged != nullptr) { |
| | | m_onSyncingStateChanged(m_nSyncStatus); |
| | | } |
| | | |
| | | if (m_hWorkStop == nullptr) { |
| | | m_hWorkStop = ::CreateEvent(NULL, TRUE, FALSE, NULL); |
| | |
| | | m_nSyncStatus = SS_FAILED; |
| | | m_nTimeoutCount = 0; |
| | | unlock(); |
| | | |
| | | if (m_onSyncingStateChanged != nullptr) { |
| | | m_onSyncingStateChanged(m_nSyncStatus); |
| | | } |
| | | } |
| | | |
| | | void CRecipesManager::syncTimeout() |
| | | { |
| | | lock(); |
| | | m_nSyncStatus = SS_TIMEOUT; |
| | | m_nTimeoutCount = 0; |
| | | unlock(); |
| | | |
| | | if (m_onSyncingStateChanged != nullptr) { |
| | | m_onSyncingStateChanged(m_nSyncStatus); |
| | | } |
| | | } |
| | | |
| | | short CRecipesManager::decodeRecipeListReport(const char* pszData, size_t size) |
| | |
| | | |
| | | } |
| | | else if (reportType == RT_REQUEST_FROM_EAS) { |
| | | int nRet = pRecipeList->addRecipePacket(toatlGroupCount, currentGroupCount, pszIdsData, 250 * 2); |
| | | int nRet = pRecipeList->addRecipePacket(totalMasterRecipeCount, toatlGroupCount, currentGroupCount, pszIdsData, 250 * 2); |
| | | if (MRLRC_CURRENT_RECIPE_COMPLETE == nRet) { |
| | | lock(); |
| | | if (m_nTotalMasterRecipeCount == m_mapRecipesTemp.size()) { |
| | | for (auto item : m_mapRecipes) { |
| | | delete item.second; |
| | | } |
| | | m_mapRecipes = m_mapRecipesTemp; |
| | | m_mapRecipesTemp.clear(); |
| | | m_nSyncStatus = SS_COMPLETE; |
| | | unlock(); |
| | | return MRLRC_OK; |
| | | for (auto item : m_mapRecipes) { |
| | | delete item.second; |
| | | } |
| | | m_mapRecipes = m_mapRecipesTemp; |
| | | m_mapRecipesTemp.clear(); |
| | | m_nSyncStatus = SS_COMPLETE; |
| | | unlock(); |
| | | |
| | | if (m_onSyncingStateChanged != nullptr) { |
| | | m_onSyncingStateChanged(m_nSyncStatus); |
| | | } |
| | | |
| | | return MRLRC_OK; |
| | | } |
| | | else if (MRLRC_CONTINUE == nRet) { |
| | | return MRLRC_CONTINUE; |
| | |
| | | return iter->second; |
| | | } |
| | | |
| | | CRecipeList* CRecipesManager::getRecipeList(int unitNo) |
| | | { |
| | | auto iter = m_mapRecipes.find(unitNo); |
| | | if (iter == m_mapRecipes.end()) return nullptr; |
| | | return iter->second; |
| | | } |
| | | |
| | | void CRecipesManager::setOnSyncingStateChanged(ONSYNCINGSTATECHANGED block) |
| | | { |
| | | m_onSyncingStateChanged = block; |
| | | } |
| | | |
| | | unsigned CRecipesManager::TimeoutCheckWorkingProc() |
| | | { |
| | | while (1) { |
| | |
| | | if (m_nSyncStatus == SS_SYNCING) { |
| | | m_nTimeoutCount++; |
| | | if (m_nTimeoutCount > 10) { |
| | | m_nSyncStatus = SS_TIMEOUT; |
| | | unlock(); |
| | | syncTimeout(); |
| | | TRACE("CRecipesManager::TimeoutCheckWorkingProc 超时退出\n"); |
| | | lock(); |
| | | } |
| | | } |
| | | |