UpgradeRunFSM.h 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. #pragma once
  2. #include "SpFSM.h"
  3. #include <list>
  4. #include "SpBase.h"
  5. using namespace std;
  6. class CUpgradeRunFSM : public FSMImpl<CUpgradeRunFSM>, public IFSMStateHooker
  7. {
  8. public:
  9. CUpgradeRunFSM(void);
  10. ~CUpgradeRunFSM(void);
  11. enum
  12. {
  13. Event_EnableUpgrade = EVT_USER+1,
  14. Event_DisableUpgrade,
  15. Event_StartUpgrade,
  16. Event_EndUpgrade,
  17. Event_CancelUpgrade,
  18. };
  19. struct StartUpgradeEvent : public FSMEvent
  20. {
  21. CSimpleStringA strPackName;
  22. int nPackType;
  23. StartUpgradeEvent(const CSimpleStringA &pack, const int nType)
  24. : FSMEvent(Event_StartUpgrade), strPackName(pack),nPackType(nType)
  25. {}
  26. };
  27. struct CancelUpgradeEvent : public FSMEvent
  28. {
  29. CSimpleStringA strPackName;
  30. CancelUpgradeEvent(const CSimpleStringA &pack)
  31. : FSMEvent(Event_CancelUpgrade), strPackName(pack)
  32. {}
  33. };
  34. ErrorCodeEnum GetRunState(CSimpleStringA &strPackName, char &cState);
  35. private:
  36. virtual ErrorCodeEnum OnInit();
  37. virtual ErrorCodeEnum OnExit();
  38. enum{s1, s2, s3};
  39. BEGIN_FSM_STATE(CUpgradeRunFSM)
  40. FSM_STATE_ENTRY(s1, "Disable",s1_on_entry,s1_on_exit,s1_on_event)
  41. FSM_STATE_ENTRY(s2, "Enable",s2_on_entry,s2_on_exit,s2_on_event)
  42. FSM_STATE_ENTRY(s3, "Upgrading",s3_on_entry,s3_on_exit,s3_on_event)
  43. END_FSM_STATE()
  44. BEGIN_FSM_RULE(CUpgradeRunFSM,s1)
  45. FSM_RULE_ENTRY(s1, s2, Event_EnableUpgrade, 0)
  46. FSM_RULE_ENTRY(s1, s3, Event_EnableUpgrade, 1)
  47. FSM_RULE_ENTRY_ANY(s2, s1, Event_DisableUpgrade)
  48. FSM_RULE_ENTRY_ANY(s2, s3, Event_StartUpgrade)
  49. FSM_RULE_ENTRY_ANY(s3, s1, Event_DisableUpgrade)
  50. FSM_RULE_ENTRY_ANY(s3, s2, Event_EndUpgrade)
  51. END_FSM_RULE()
  52. virtual void OnStateTrans(int iSrcState, int iDstState);
  53. void s1_on_entry();
  54. void s1_on_exit();
  55. unsigned int s1_on_event(FSMEvent* event);
  56. void s2_on_entry();
  57. void s2_on_exit();
  58. unsigned int s2_on_event(FSMEvent* event);
  59. void s3_on_entry();
  60. void s3_on_exit();
  61. unsigned int s3_on_event(FSMEvent* event);
  62. ErrorCodeEnum CheckInstallPackSign();
  63. bool IsManual();
  64. ErrorCodeEnum UnzipPack();
  65. ErrorCodeEnum NewUnzipPack();
  66. ErrorCodeEnum UncabPack();
  67. ErrorCodeEnum DeleteInstallingPack();
  68. DWORD waitSystem(const CSimpleStringA cmd, const CSimpleStringA par, BOOL nShow);
  69. DWORD SYSTEM_ON(CSimpleStringA cmdLine, BOOL isWait);
  70. ErrorCodeEnum CheckInstallConfig(CAutoArray<CSimpleStringA> &coverlist, CSimpleStringA &strErrMsg);
  71. ErrorCodeEnum InstallPack(bool &bSysInstall, bool &bLightPack, CSimpleStringA &strNewVersion, CSimpleStringA &strErrMsg);
  72. ErrorCodeEnum GetUnzipTempDir(CSimpleStringA &strUnzipDir);
  73. ErrorCodeEnum GetInstallConfigPath(CSimpleStringA &strConfigPath);
  74. CSimpleStringA GetFileName(const char *pszFullPath);
  75. CSimpleStringA GetFileDirectory(const char *pszFullPath);
  76. void RecursiveGetSubFiles(const char *pszDir, const char *pszTrimStart, list<CSimpleStringA>& retList);
  77. bool IsFileMatch(const char *pszFilter, const char *pszFileName);
  78. ErrorCodeEnum DeleteUnzipDir();
  79. CSimpleStringA GetSysPatchNameFromPackName(const char *pszPackName);
  80. bool CheckNewRunFilesSign();
  81. public:
  82. CSimpleStringA m_strInstallPack;
  83. int m_nIntallPackType; // 当前正在安装的项的包类型,1,自动安装;2,手动安装
  84. char m_chInstallState; // N 未解压; Z 已解压;C 已检查; I 已安装
  85. };