chenluhua1980
2026-01-06 4d9d8d22e3666076988c30afb4e7c6fe365c19aa
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#pragma once
#include <map>
#include "CRecipeList.h"
#include <functional>
 
 
#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<void(int state)> 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);
        bool saveRecipeList(int unitNo, std::string& strFilepath);
        bool readRecipeList(int unitNo, std::string& strFilepath);
 
    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<int, CRecipeList*> m_mapRecipes;
        std::map<int, CRecipeList*> m_mapRecipesTemp;
        ONSYNCINGSTATECHANGED m_onSyncingStateChanged;
    };
}