123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101 |
- #pragma once
- #include "SpFSM.h"
- #include <list>
- #include "SpBase.h"
- using namespace std;
- class CUpgradeRunFSM : public FSMImpl<CUpgradeRunFSM>, public IFSMStateHooker
- {
- public:
- CUpgradeRunFSM(void);
- ~CUpgradeRunFSM(void);
- enum
- {
- Event_EnableUpgrade = EVT_USER+1,
- Event_DisableUpgrade,
- Event_StartUpgrade,
- Event_EndUpgrade,
- Event_CancelUpgrade,
- };
- struct StartUpgradeEvent : public FSMEvent
- {
- CSimpleStringA strPackName;
- int nPackType;
- StartUpgradeEvent(const CSimpleStringA &pack, const int nType)
- : FSMEvent(Event_StartUpgrade), strPackName(pack),nPackType(nType)
- {}
- };
- struct CancelUpgradeEvent : public FSMEvent
- {
- CSimpleStringA strPackName;
- CancelUpgradeEvent(const CSimpleStringA &pack)
- : FSMEvent(Event_CancelUpgrade), strPackName(pack)
- {}
- };
- ErrorCodeEnum GetRunState(CSimpleStringA &strPackName, char &cState);
- private:
- virtual ErrorCodeEnum OnInit();
- virtual ErrorCodeEnum OnExit();
- enum{s1, s2, s3};
-
- BEGIN_FSM_STATE(CUpgradeRunFSM)
- FSM_STATE_ENTRY(s1, "Disable",s1_on_entry,s1_on_exit,s1_on_event)
- FSM_STATE_ENTRY(s2, "Enable",s2_on_entry,s2_on_exit,s2_on_event)
- FSM_STATE_ENTRY(s3, "Upgrading",s3_on_entry,s3_on_exit,s3_on_event)
- END_FSM_STATE()
- BEGIN_FSM_RULE(CUpgradeRunFSM,s1)
- FSM_RULE_ENTRY(s1, s2, Event_EnableUpgrade, 0)
- FSM_RULE_ENTRY(s1, s3, Event_EnableUpgrade, 1)
- FSM_RULE_ENTRY_ANY(s2, s1, Event_DisableUpgrade)
- FSM_RULE_ENTRY_ANY(s2, s3, Event_StartUpgrade)
- FSM_RULE_ENTRY_ANY(s3, s1, Event_DisableUpgrade)
- FSM_RULE_ENTRY_ANY(s3, s2, Event_EndUpgrade)
- END_FSM_RULE()
- virtual void OnStateTrans(int iSrcState, int iDstState);
- void s1_on_entry();
- void s1_on_exit();
- unsigned int s1_on_event(FSMEvent* event);
- void s2_on_entry();
- void s2_on_exit();
- unsigned int s2_on_event(FSMEvent* event);
- void s3_on_entry();
- void s3_on_exit();
- unsigned int s3_on_event(FSMEvent* event);
- ErrorCodeEnum CheckInstallPackSign();
- bool IsManual();
- ErrorCodeEnum UnzipPack();
- ErrorCodeEnum NewUnzipPack();
- ErrorCodeEnum UncabPack();
- ErrorCodeEnum DeleteInstallingPack();
- DWORD waitSystem(const CSimpleStringA cmd, const CSimpleStringA par, BOOL nShow);
- DWORD SYSTEM_ON(CSimpleStringA cmdLine, BOOL isWait);
- ErrorCodeEnum CheckInstallConfig(CAutoArray<CSimpleStringA> &coverlist, CSimpleStringA &strErrMsg);
- ErrorCodeEnum InstallPack(bool &bSysInstall, bool &bLightPack, CSimpleStringA &strNewVersion, CSimpleStringA &strErrMsg);
- ErrorCodeEnum GetUnzipTempDir(CSimpleStringA &strUnzipDir);
- ErrorCodeEnum GetInstallConfigPath(CSimpleStringA &strConfigPath);
- CSimpleStringA GetFileName(const char *pszFullPath);
- CSimpleStringA GetFileDirectory(const char *pszFullPath);
- void RecursiveGetSubFiles(const char *pszDir, const char *pszTrimStart, list<CSimpleStringA>& retList);
- bool IsFileMatch(const char *pszFilter, const char *pszFileName);
- ErrorCodeEnum DeleteUnzipDir();
- CSimpleStringA GetSysPatchNameFromPackName(const char *pszPackName);
- bool CheckNewRunFilesSign();
- public:
- CSimpleStringA m_strInstallPack;
- int m_nIntallPackType; // 当前正在安装的项的包类型,1,自动安装;2,手动安装
- char m_chInstallState; // N 未解压; Z 已解压;C 已检查; I 已安装
- };
|