mod_UpgradeMgr.h 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175
  1. #ifndef RVC_MOD_UPGRADEMGR_H_
  2. #define RVC_MOD_UPGRADEMGR_H_
  3. #include "stdafx.h"
  4. #include "SpBase.h"
  5. #include "SimpleString.h"
  6. #include "UpgradeManager_server_g.h"
  7. #include "UpgradeManager_UserErrorCode.h"
  8. #ifdef RVC_OS_WIN
  9. #else
  10. #include "SpTest.h"
  11. #include "modVer.h"
  12. #endif
  13. #include "UpgradeTaskFSM.h"
  14. using namespace UpgradeManager;
  15. #define UPGRADE_MGR_NOT_IMPLEMENT 0xF0000000 // 新升级模式未实现
  16. // 升级管理 UpgradeManager 0x506
  17. class CUpgradeMgrEntity : public CEntityBase, public ISysVarListener, public ILogListener
  18. {
  19. public:
  20. CUpgradeMgrEntity(){
  21. m_IsSM3listSucc=0;
  22. m_beginSM3HashTime=0;
  23. m_strSM3Hash="";
  24. m_bStartUp=false;//首页是否进入
  25. m_initSucc=false;//状态机是否启动成功
  26. m_bSystemStartUp=false;//框架是否启动成功
  27. m_testResult=Error_Succeed;//默认是成功的
  28. m_iBlackFileSum=0;
  29. }
  30. virtual ~CUpgradeMgrEntity() {}
  31. virtual const char *GetEntityName() const { return "UpgradeManager"; }
  32. virtual bool IsService()const{return true;}
  33. #ifdef RVC_OS_WIN
  34. #else
  35. const char* GetEntityVersion() const override
  36. {
  37. return MODULE_VERSION_FULL;
  38. }
  39. ON_ENTITYT_TEST()
  40. #endif
  41. virtual void OnStarted();
  42. virtual void OnSelfTest(EntityTestEnum eTestType,CSmartPointer<ITransactionContext> pTransactionContext);
  43. virtual void OnPreClose(EntityCloseCauseEnum eCloseCause,CSmartPointer<ITransactionContext> pTransactionContext);
  44. virtual CServerSessionBase *OnNewSession(const char* /*pszRemoteEntityName*/, const char * /*pszParam*/);
  45. virtual void OnSysVarEvent(const char *pszKey, const char *pszValue,const char *pszOldValue,const char *pszEntityName);
  46. static char GetInstallStateVal(const InstallStateEnum enumVal);
  47. ErrorCodeEnum RegistLocalPack(const CSimpleStringA &strPackFile);
  48. DWORD RegistManualPack(const CSimpleStringA &strPackFile);
  49. DWORD GetManualPacks(CSimpleStringA &strManualPacks);
  50. ErrorCodeEnum CancelUpdate(const CSimpleStringA &strPackName);
  51. ErrorCodeEnum RollbackUpdate(const CSimpleStringA &strVersion);
  52. ErrorCodeEnum SwitchUpgrade(const CSimpleStringA &strPack);
  53. ErrorCodeEnum GetUpgradeState(bool &bInstalling, CSimpleStringA &strPackFile, CSimpleStringA &strExecID,
  54. char &nInstallState, bool &bSysInstall, bool &bLightPack, CSimpleStringA &strNewVersion);
  55. //检测active文件是否被锁
  56. ErrorCodeEnum testActive();
  57. //modify by lwt 新状态机加入方法
  58. ErrorCodeEnum NewStopMediaPlay();
  59. static void HttpsLogCallBack(const char* logtxt);
  60. virtual void OnLog(const CAutoArray<CUUID>& SubIDs, const CUUID nLogID, const LogTypeEnum eLogType, const SeverityLevelEnum eLevel,
  61. const DWORD dwSysError, const DWORD dwUserCode, const DWORD dwEntityInstanceID, const WORD wEntityDevelID,
  62. const CAutoArray<DWORD>& Param, const char* pszEntityName, const char* pszModuleName, const char* pszMessage, const linkContext& pLinkInfo);
  63. public:
  64. map<CSimpleStringA, CSimpleStringA> m_FileHashMap; // 版本文件hash值集合
  65. CSimpleStringA m_strMD5List;
  66. CSimpleStringA m_strSM3Hash;//SM3 32位hash
  67. int m_IsSM3listSucc;//获取SM3哈希list是否成功,0:还未计算完毕,1:表示成功 ,-1表示计算失败
  68. DWORD m_beginSM3HashTime;//开始计算sm3hahs时间
  69. bool m_bStartUp;//是否系统首页启动成功
  70. bool m_bSystemStartUp;//框架启动成功
  71. CUpgradeTaskFSM m_taskFSM;
  72. bool bNewUpgradeMgr;//是否启用新状态机(很重要的变量)
  73. ErrorCodeEnum m_testResult;//实体级别握手变量
  74. CSimpleStringA m_grayLaunchUrl;//灰度发布url地址
  75. int m_CenterModel;//集中配置模式 0:旧模式 1:新旧并存模式 2:新模式
  76. bool m_initSucc;//状态机是否启动成功
  77. int m_iBlackFileSum;//黑名单文件数量
  78. private:
  79. CUUID m_uuidHeartBeat;
  80. };
  81. class CUpgradeMgrSession : public UpgradeMgrService_ServerSessionBase
  82. {
  83. public:
  84. CUpgradeMgrSession(CUpgradeMgrEntity *pEntity) : m_pEntity(pEntity) {}
  85. virtual ~CUpgradeMgrSession() {}
  86. virtual void Handle_RegistLocalPack(SpReqAnsContext<UpgradeMgrService_RegistLocalPack_Req, UpgradeMgrService_RegistLocalPack_Ans>::Pointer ctx)
  87. {
  88. DbgToBeidou(ctx->link, __FUNCTION__)();
  89. ErrorCodeEnum rc = m_pEntity->RegistLocalPack(ctx->Req.strPackFile);
  90. ctx->Answer(rc);
  91. }
  92. virtual void Handle_RegistManualPack(SpReqAnsContext<UpgradeMgrService_RegistManualPack_Req, UpgradeMgrService_RegistManualPack_Ans>::Pointer ctx)
  93. {
  94. LOG_FUNCTION();
  95. DbgToBeidou(ctx->link, __FUNCTION__)();
  96. DbgWithLink(LOG_LEVEL_INFO, ctx->link.checkEmpty() ? LOG_TYPE_SYSTEM : LOG_TYPE_USER).setAPI("Handle_IsDownloading")("RegistManualPack received!");
  97. DWORD dwRet = 0;
  98. CSimpleStringA strErrmsg="RegistManualPack new UpgradeMgr is not deal with";
  99. dwRet = m_pEntity->RegistManualPack(ctx->Req.strPackFile);
  100. ctx->Ans.Errcode = dwRet;
  101. ctx->Ans.ErrMsg = strErrmsg;
  102. ctx->Answer(Error_Succeed);
  103. }
  104. virtual void Handle_CancelUpdate(SpReqAnsContext<UpgradeMgrService_CancelUpdate_Req, UpgradeMgrService_CancelUpdate_Ans>::Pointer ctx)
  105. {
  106. DbgToBeidou(ctx->link, __FUNCTION__)();
  107. DbgWithLink(LOG_LEVEL_INFO, ctx->link.checkEmpty() ? LOG_TYPE_SYSTEM : LOG_TYPE_USER).setAPI("Handle_CancelUpdate")("CancelUpdate received!");
  108. ErrorCodeEnum rc = m_pEntity->CancelUpdate(ctx->Req.strPackFile);
  109. ctx->Answer(rc);
  110. }
  111. virtual void Handle_RollbackUpdate(SpReqAnsContext<UpgradeMgrService_RollbackUpdate_Req, UpgradeMgrService_RollbackUpdate_Ans>::Pointer ctx)
  112. {
  113. DbgToBeidou(ctx->link, __FUNCTION__)();
  114. DbgWithLink(LOG_LEVEL_INFO, ctx->link.checkEmpty() ? LOG_TYPE_SYSTEM : LOG_TYPE_USER).setAPI("Handle_RollbackUpdate")("RollbackUpdate received!");
  115. auto rc = m_pEntity->RollbackUpdate(ctx->Req.strVersion);
  116. ctx->Answer(rc);
  117. }
  118. virtual void Handle_GetUpgradeState(SpReqAnsContext<UpgradeMgrService_GetUpgradeState_Req, UpgradeMgrService_GetUpgradeState_Ans>::Pointer ctx)
  119. {
  120. DbgToBeidou(ctx->link, __FUNCTION__)();
  121. DbgWithLink(LOG_LEVEL_INFO, ctx->link.checkEmpty() ? LOG_TYPE_SYSTEM : LOG_TYPE_USER).setAPI("Handle_GetUpgradeState")("GetUpgradeState received!");
  122. auto rc = m_pEntity->GetUpgradeState(ctx->Ans.bInstalling, ctx->Ans.strPackFile, ctx->Ans.strExecID,
  123. ctx->Ans.cInstallState, ctx->Ans.bSysInstall, ctx->Ans.bLightPack, ctx->Ans.strNewVersion);
  124. ctx->Answer(rc);
  125. }
  126. virtual void Handle_SwitchUpgrade(SpReqAnsContext<UpgradeMgrService_SwitchUpgrade_Req, UpgradeMgrService_SwitchUpgrade_Ans>::Pointer ctx)
  127. {
  128. DbgToBeidou(ctx->link, __FUNCTION__)();
  129. DbgWithLink(LOG_LEVEL_INFO, ctx->link.checkEmpty() ? LOG_TYPE_SYSTEM : LOG_TYPE_USER).setAPI("Handle_SwitchUpgrade")("SwitchUpgrade received!");
  130. auto rc = m_pEntity->SwitchUpgrade(ctx->Req.strPackFile);
  131. ctx->Answer(rc);
  132. }
  133. virtual void Handle_GetManualPacks(SpReqAnsContext<UpgradeMgrService_GetManualPacks_Req, UpgradeMgrService_GetManualPacks_Ans>::Pointer ctx)
  134. {
  135. LOG_FUNCTION();
  136. DbgToBeidou(ctx->link, __FUNCTION__)();
  137. DbgWithLink(LOG_LEVEL_INFO, ctx->link.checkEmpty() ? LOG_TYPE_SYSTEM : LOG_TYPE_USER).setAPI("Handle_GetManualPacks")("GetManualPacks received!");
  138. DWORD dwRet = 0;
  139. CSimpleStringA strErrmsg= "GetManualPacks new UpgradeMgr is not deal with";
  140. CSimpleStringA strPackList="";
  141. dwRet = m_pEntity->GetManualPacks(strPackList);
  142. ctx->Ans.Errcode = dwRet;
  143. ctx->Ans.ErrMsg = strErrmsg;
  144. ctx->Answer(Error_Succeed);
  145. }
  146. private:
  147. CUpgradeMgrEntity *m_pEntity;
  148. };
  149. #endif //RVC_MOD_UPGRADEMGR_H_