#pragma once #include #include "CRecipeList.h" #include #define SS_NONE 0 #define SS_SYNCING 1 #define SS_LIST_COMPLETE 2 #define SS_PARAMS_COMPLETE 3 #define SS_TIMEOUT 4 #define SS_FAILED 5 namespace SERVO { typedef std::function ONSYNCINGSTATECHANGED; class CRecipesManager { public: CRecipesManager(); virtual ~CRecipesManager(); public: void setOnSyncingStateChanged(ONSYNCINGSTATECHANGED block); unsigned TimeoutCheckWorkingProc(); int syncing(); void syncFailed(); void syncTimeout(); short decodeRecipeListReport(const char* pszData, size_t size); short decodeRecipeParameterReport(const char* pszData, size_t size); CRecipeList* getRecipeListFromTemp(int unitNo); CRecipeList* getRecipeList(int unitNo); public: inline void lock() { ::EnterCriticalSection(&m_cs); }; inline void unlock() { ::LeaveCriticalSection(&m_cs); }; private: HANDLE m_hWorkThreadHandle; unsigned m_nWordThreadAddr; HANDLE m_hWorkStop; int m_nTimeoutCount; CRITICAL_SECTION m_cs; // ͬ²½Ëø int m_nSyncStatus; int m_nTotalMasterRecipeCount; int m_nTotalParameterCount; std::map m_mapRecipes; std::map m_mapRecipesTemp; ONSYNCINGSTATECHANGED m_onSyncingStateChanged; }; }