UpgradeTaskFSM.h 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518
  1. #ifndef RVC_MOD_UPGRADETASK_FSM_H_
  2. #define RVC_MOD_UPGRADETASK_FSM_H_
  3. #include "stdafx.h"
  4. #include "SimpleString.h"
  5. #include "SpBase.h"
  6. #include "SpFSM.h"
  7. #include <list>
  8. #include <map>
  9. #include <queue>
  10. #include "IHttpFunc.h"
  11. #define DOWNLOAD_CONTENT_EACH_LEN 2*1024*1024
  12. #define DOWNLOAD_TIMEOUT 2*60
  13. #define QUERY_NO_TASK_WARN_LIMIT 10
  14. using namespace std;
  15. #define WARN_TASK_COPY_FILE_ZERO 0x50620022 //升级copy文件夹文件个数为0
  16. #define ERR_TASK_QUERY_PRE_NEW_TASK_FAIL 0x50620023 //查询新任务报错
  17. #define ERR_TASK_QUERY_CONTINUE_NEW_TASK_FAIL 0x50620024 //查询继续新任务报错
  18. #define ERR_TASK_QUERY_CONTINUE_NEW_TASK_ERR 0x50620025 //查询继续新任务异常
  19. #define WARN_BLACK_FILE_SUM 0x50600023 //黑名单文件数量
  20. #define UpgradeMgr_VERSION_DOWNLOAD_ID "QLR0402506Z10101"
  21. #define UpgradeMgr_VERSION_INSTALL_ID "QLR0402506Z10201"
  22. #define UpgradeMgr_VERSION_SWTICH_ID "QLR0402506Z10301"
  23. #define UpgradeMgr_VERSION_START_ID "QLR0402506Z10401"
  24. #define UpgradeMgr_OUTSIDE_SYSTEM_DOWNLOAD_ID "QLR0402506Z10102"
  25. #define UpgradeMgr_OUTSIDE_SYSTEM_INSTALL_ID "QLR0402506Z10202"
  26. #define UpgradeMgr_OUTSIDE_SYSTEM_SWTICH_ID "QLR0402506Z10302"
  27. #define UpgradeMgr_OUTSIDE_SYSTEM_START_ID "QLR0402506Z10405"
  28. #define UpgradeMgr_PerTask_HTTP_ERR "QLR0402506Z10501"
  29. namespace HttpStruct
  30. {
  31. //发送文件hash列表接口
  32. struct SendSM3TaskReq : CHTTPReq {
  33. string m_reqStr;
  34. string ToJson() {
  35. return m_reqStr;
  36. }
  37. };
  38. struct SendSM3TaskRet : CHTTPRet {
  39. string m_retStr;
  40. bool Parse(string strData) {
  41. m_retStr=strData;
  42. return true;
  43. }
  44. };
  45. //更新任务状态接口
  46. struct UpdateTaskStatusReq : CHTTPReq {
  47. string m_reqStr;
  48. string ToJson() {
  49. return m_reqStr;
  50. }
  51. };
  52. struct UpdateTaskStatusRet : CHTTPRet {
  53. string m_retStr;
  54. bool Parse(string strData) {
  55. m_retStr=strData;
  56. return true;
  57. }
  58. };
  59. //查询当前任务
  60. struct QueryCurrTaskReq : CHTTPReq {
  61. string m_reqStr;
  62. string ToJson() {
  63. return m_reqStr;
  64. }
  65. };
  66. struct QueryCurrTaskRet : CHTTPRet {
  67. string m_retStr;
  68. bool Parse(string strData) {
  69. m_retStr=strData;
  70. return true;
  71. }
  72. };
  73. //查询新任务
  74. struct QueryNewTaskReq : CHTTPReq {
  75. string m_reqStr;
  76. string ToJson() {
  77. return m_reqStr;
  78. }
  79. };
  80. struct QueryNewTaskRet : CHTTPRet {
  81. string m_retStr;
  82. bool Parse(string strData) {
  83. m_retStr=strData;
  84. return true;
  85. }
  86. };
  87. //断点下载升级包
  88. struct DownloadPackTaskRet{
  89. long content_length;
  90. long origin_file_length;
  91. bool bfinish;
  92. string sm3;
  93. };
  94. }
  95. // 升级任务状态机
  96. class CUpgradeTaskFSM : public FSMImpl<CUpgradeTaskFSM>, public IFSMStateHooker, public ISysVarListener
  97. {
  98. public:
  99. enum
  100. {
  101. Event_Start = EVT_USER+1,
  102. Event_StartDealTask,
  103. Event_DealCurrTask,
  104. Event_EndUpdateTask,
  105. Event_EndQueryCurrTask,
  106. Event_StartPoll,
  107. Event_EndPoll,
  108. Event_EndPrePoll,
  109. Event_EndSendSM3Task,
  110. Event_EndContinuePoll,
  111. Event_StartDownload,
  112. Event_EndQueryTaskStatus,
  113. Event_Download_Idle,
  114. Event_EndDownload,
  115. Event_Download_Fail,
  116. Event_CancelTask,
  117. Event_StartInstall,
  118. Event_EndUnzipPackTask,
  119. Event_EndStopMediaPlayTask,
  120. Event_EndInstallPackTask,
  121. Event_EndInstall,
  122. Event_StartSwitch,
  123. Event_PreRestart,
  124. };
  125. struct SendSM3TaskEvent:public FSMEvent
  126. {
  127. bool isSucc;//是否写入成功
  128. SendSM3TaskEvent(bool isSendSucc)
  129. : FSMEvent(Event_EndSendSM3Task), isSucc(isSendSucc)
  130. {}
  131. };
  132. struct UpdateTaskStatusEvent:public FSMEvent
  133. {
  134. bool isSucc;//是否更新成功
  135. UpdateTaskStatusEvent(bool isSendSucc)
  136. : FSMEvent(Event_EndUpdateTask), isSucc(isSendSucc)
  137. {}
  138. };
  139. struct QueryCurrTaskEvent:public FSMEvent
  140. {
  141. bool isSucc;//是否查询成功
  142. bool isTask_valid;//任务是否有效
  143. QueryCurrTaskEvent(bool isSendSucc,bool isValid)
  144. : FSMEvent(Event_EndQueryCurrTask), isSucc(isSendSucc),isTask_valid(isValid)
  145. {}
  146. };
  147. struct QueryNewTaskEvent:public FSMEvent
  148. {
  149. bool isSucc;//是否查询成功
  150. QueryNewTaskEvent(bool isSendSucc)
  151. : FSMEvent(Event_EndPoll), isSucc(isSendSucc)
  152. {}
  153. };
  154. struct QueryNewContinueTaskEvent:public FSMEvent
  155. {
  156. int retParam;//是否查询成功
  157. QueryNewContinueTaskEvent(int ret)
  158. : FSMEvent(Event_EndContinuePoll)
  159. {
  160. retParam = ret;
  161. }
  162. };
  163. struct QueryNewPreTaskEvent:public FSMEvent
  164. {
  165. bool isSucc;//是否查询成功
  166. QueryNewPreTaskEvent(bool isSendSucc)
  167. : FSMEvent(Event_EndPrePoll), isSucc(isSendSucc)
  168. {}
  169. };
  170. struct QueryTaskStatusEvent:public FSMEvent
  171. {
  172. bool isSucc;//是否查询成功
  173. bool isTask_valid;//任务是否有效
  174. QueryTaskStatusEvent(bool isSendSucc,bool isValid)
  175. : FSMEvent(Event_EndQueryTaskStatus), isSucc(isSendSucc),isTask_valid(isValid)
  176. {}
  177. };
  178. struct DownloadPackTaskEvent:public FSMEvent
  179. {
  180. bool isSucc;
  181. DownloadPackTaskEvent(bool isDownloadSucc)
  182. : FSMEvent(Event_EndDownload), isSucc(isDownloadSucc)
  183. {}
  184. };
  185. struct DownloadPackTaskFailEvent:public FSMEvent
  186. {
  187. string errMsg;//错误信息
  188. DownloadPackTaskFailEvent(string errorMsg)
  189. : FSMEvent(Event_Download_Fail), errMsg(errorMsg)
  190. {}
  191. };
  192. struct StopMediaPlayTaskEvent:public FSMEvent
  193. {
  194. bool isSucc;
  195. StopMediaPlayTaskEvent(bool isStopSucc)
  196. : FSMEvent(Event_EndStopMediaPlayTask), isSucc(isStopSucc)
  197. {}
  198. };
  199. struct UnzipPackTaskEvent:public FSMEvent
  200. {
  201. bool isSucc;
  202. UnzipPackTaskEvent(bool isUnzipSucc)
  203. : FSMEvent(Event_EndUnzipPackTask), isSucc(isUnzipSucc)
  204. {}
  205. };
  206. struct InstallPackTaskEvent:public FSMEvent
  207. {
  208. bool isSucc;
  209. CSimpleStringA errMsg;
  210. int failStatus;
  211. InstallPackTaskEvent(bool isInstallSucc,CSimpleStringA errMsgStr,int iFailStatus)
  212. : FSMEvent(Event_EndInstallPackTask), isSucc(isInstallSucc),errMsg(errMsgStr),failStatus(iFailStatus)
  213. {}
  214. };
  215. struct CInstallStep
  216. {
  217. //不存储到运行时
  218. int stepSeq; //步骤序号
  219. CSimpleStringA cmdType; //升级安装需执行命令类型:Delete、Copy、Run
  220. int cmdFail; //0:执行失败认为升级失败 1:执行失败忽略继续升级
  221. CSimpleStringA srcPathType; //0:相对路径 1:绝对路径 2:当前版本相对路径 3:升级包相对路径
  222. CSimpleStringA srcPath;
  223. CSimpleStringA dstPathType; //0:相对路径 1:绝对路径 2:当前版本相对路径 3:升级版本相对路径 4:升级包相对路径
  224. CSimpleStringA dstPath;
  225. };
  226. // 待安装任务信息(运行时保存的中间变量)
  227. struct CTaskInfo
  228. { //存储到运行时
  229. CSimpleStringA upgradeTaskId; //升级任务编号
  230. CSimpleStringA createTaskVersion;//创建升级任务时的版本号
  231. CSimpleStringA cPendingState; // 已下载D、安装中I、等待切换S、任务结果确认T
  232. CSimpleStringA NewVersion; // 任务升级后的版本号
  233. CSimpleStringA pack_name; //升级包名
  234. //不存储到运行时
  235. CSimpleStringA pack_version; //升级包指定的版本号
  236. //CSimpleStringA to_copy; //拷贝文件列表
  237. //CSimpleStringA to_run; //体系外运行脚本文件名称
  238. bool stop_media_play; //停止广告播放(0:不停止 1:停止)
  239. int reboot_type; //重启策略类型(0:不启动 1:重启框架 2:重启系统)
  240. CSimpleStringA file_path; //升级包路径
  241. CSimpleStringA download_url; //升级包下载地址
  242. CSimpleStringA pack_hash; //升级包hash值
  243. long pack_length; //升级包长度(服务端暂时不传)
  244. queue<CInstallStep*> install_step;//安装步骤队列
  245. };
  246. struct CTaskProcess
  247. {
  248. CSimpleStringA strPackName;//包名
  249. CSimpleStringA installVersion;//安装版本号
  250. CVersion CurrentVersion;//当前版本号
  251. CSimpleStringA cInstallState;//升级状态
  252. CSimpleStringA strInstallComment;//升级状态备注
  253. };
  254. struct CenterUrl
  255. {
  256. string updateTaskUrl; //更新升级任务url
  257. string queryCurrTaskUrl; //查询当前任务url
  258. string queryNewTaskUrl; //查询新任务url(旧版本使用)
  259. string queryPreTaskUrl; //预查询新任务url
  260. string queryContinueTaskUrl; //继续查询新任务url
  261. string queryTaskStatus; //查询当前任务是否有效url
  262. string sendSM3TaskUrl; //发送文件hashurl
  263. };
  264. struct HashScanSet
  265. {
  266. CSimpleStringA relativeDir; //相对路径
  267. CSimpleStringA absoluteDir; //绝对路径
  268. CSimpleStringA currVerDir; //当前版本相对路径
  269. CSimpleStringA blackFile; //不纳入扫描的文件名称
  270. CSimpleStringA blackDir; //不纳入扫描的文件夹
  271. };
  272. public:
  273. CUpgradeTaskFSM(){
  274. isSendHash = false;//默认查询策略不发送hash
  275. m_isSM3HashSucc = false;//默认hash计算失败
  276. m_bDownloadIdle = false;
  277. m_bTaskCancel=false;
  278. m_fileSM3ListHash="";//终端hash列表64位hash值
  279. m_fileSM3List = "";//终端hash列表值
  280. m_strPreTaskId="";//预检查任务ID
  281. m_bNeedHash=0;//预检查是否需要hash
  282. m_eachDownloadLen=DOWNLOAD_CONTENT_EACH_LEN;
  283. m_newEachDownloadLen=DOWNLOAD_CONTENT_EACH_LEN;
  284. m_PrintHttpLog =false;
  285. m_startFlag = false;
  286. m_iBlackFileCount=0;
  287. m_bSwitchFlag = false;
  288. m_bRollbackTask = false;
  289. }
  290. ~CUpgradeTaskFSM(){}
  291. //具体实现方法
  292. //ErrorCodeEnum UpdatePackInstall(string updatePackName,CSimpleStringA &strErrMsg);//系统升级包安装
  293. ErrorCodeEnum CreateNewVersion(CVersion NewSoftwareVersion,CSimpleStringA &strErrInfo);//创建新版本
  294. ErrorCodeEnum ClearUpgradeFailVersion(CVersion NewSoftwareVersion);//清理升级新版本临时文件
  295. //int SysPackInstall(string sysPackName, CSimpleStringA &strErrMsg);//体系外升级包安装 0:失败 1:成功 -1:未知
  296. bool GetSysUpgradeResult(const char *pszResultLog, CSimpleStringA &eErrorCode, CSimpleStringA &strErrMsg);//从体系外生成的result.log文件中获取结果
  297. //ErrorCodeEnum LightPackInstall(string LightPackName, CSimpleStringA &strErrMsg);//轻量升级包安装
  298. //安装执行步骤方法
  299. int ExecInstall(CSimpleStringA &strErrMsg);//升级安装 0:失败 1:成功 -1:未知
  300. int ExecRunCmd(CSimpleStringA &strErrMsg,CInstallStep* ins);
  301. bool ExecDeleteCmd(CSimpleStringA &strErrMsg,CInstallStep* ins);
  302. bool ExecCpoyCmd(CSimpleStringA &strErrMsg,CInstallStep* ins);
  303. bool GetRootTypePath(int rootType,CSimpleStringA &rootPath);//1:相对路径 2:当前版本相对路径 3:升级版本相对路径 4:升级包相对路径
  304. ErrorCodeEnum CopyFileOperate(const char* srcPath, const char* destPath, int nCopyMode, CSimpleStringA &strErrMsg);
  305. //ErrorCodeEnum CopyFileToNewVersion(string updatePackPath,const char *pszRelativeFile,const char * newVersion, int nCopyMode);//拷贝增量文件到新版本
  306. ErrorCodeEnum SetRunSucceed(const char* pPackFile);//成功切换新版本
  307. ErrorCodeEnum UpgradeToNewVersion();//设置新版本状态
  308. ErrorCodeEnum RollBackToHistoryVersion(CVersion historyVersion);//回退到某个历史版本
  309. //ErrorCodeEnum CopyFolder(CSimpleStringA strSourcePath, CSimpleStringA strDestPath);
  310. void RecursiveGetSubFiles(const char *pszDir, const char *pszTrimStart, list<CSimpleStringA>& retList);
  311. bool IsFileMatch(const char *pszFilter, const char *pszFileName);
  312. bool RecursiveCopyDir(const char *pszSourceDir, const char *pszDestDir,CSimpleStringA &strErrInfo);//可以合并
  313. CSimpleStringA GetFileDirectory(const char *pszFullPath);//查找文件的父路径
  314. bool IsWow64Process();//判断是否是64位windows程序
  315. int system_on(string cmdFilePath, bool isWait,CSimpleStringA &errMsg);//cmd窗口程序
  316. int waitSystem(string cmd, const char * par, bool nShow,CSimpleStringA &errMsg);//起进程执行cmd
  317. char* ConvertUtf8ToGBK(const char* strUtf8);
  318. void ConvertUtf8ToGBK(std::string &str);
  319. char* ConvertGBKToUtf8(const char* gbk, int *n);
  320. void ConvertGBKToUtf8(std::string &str);
  321. bool is_str_utf8(const char* str);
  322. ErrorCodeEnum UnzipPack(const char* unZipPackName);//解压文件
  323. ErrorCodeEnum DeleteUnzipDir();//清理临时解压包文件
  324. void SendUpgradeTaskProgress(CTaskProcess &process);
  325. ErrorCodeEnum GetRunConfigStrValue(const char *pszSection, const char *pszKey, CSimpleStringA &strValue);
  326. ErrorCodeEnum SetRunConfigStrValue(const char *pszSection, const char *pszKey, const char *pszValue);
  327. bool ClearCurrTaskInfo();//任务无效清除运行时记录和残留下载包
  328. bool ClearInstallStep();//清理历史任务安装步骤
  329. ErrorCodeEnum LoadPersistTaskInfo();//启动开始加载运行时文件
  330. ErrorCodeEnum LoadCfgInfo();//启动开始加载配置文件
  331. ErrorCodeEnum loadCenterCfgInfo();//启动开始加载集中配置文件
  332. bool GetFileLength(const char* filePath,long &fileLen);//获取文件长度
  333. ErrorCodeEnum GetSM3List(CSimpleStringA &strSM3List);//获取版本文件hash集合字符串
  334. //ErrorCodeEnum SM3Folder(CSimpleStringA strFolderPath,CSimpleStringA replaceStr,CSimpleStringA prefix,bool isDepDir=false);
  335. ErrorCodeEnum ScanSM3ByType(int type,CSimpleStringA pathFilter);
  336. ErrorCodeEnum NewSM3Folder(CSimpleStringA scanFilter,CSimpleStringA replaceDir);//新的hash扫描文件夹实现
  337. //新国密SM3函数,isSub表示是否截取新国密中间一段密文
  338. ErrorCodeEnum SM3FileToStr(CSimpleStringA strFilePath, CSimpleStringA &strSM3,bool isSub);
  339. ErrorCodeEnum SM3DataToStr(CSimpleStringA strData, CSimpleStringA &strSM3,bool isSub);
  340. ErrorCodeEnum SM3_Str(CSimpleStringA &strSM3,BYTE * SM3Byte,bool isSub);
  341. bool IsPackDownloaded(const char *pPackName,const char* packHash,long packLen);//判断安装包是否已下载成功
  342. bool DownloadFileWrite(byte* content,long contentLen,const char* filePath);
  343. bool CheckIfCanSwitchNow();//是否允许切换
  344. ErrorCodeEnum SwitchUpgradeNow();//切换版本
  345. ErrorCodeEnum DownloadProgress(long tempFileLen,long fileSumLen);//返回下载进度
  346. char GetInstallState(int nState);//根据状态机获取升级状态
  347. ErrorCodeEnum GetUpgradeState(bool &bInstalling, CSimpleStringA &strPackFile, CSimpleStringA &strExecID,
  348. char &cInstallState, bool &bSysInstall, bool &bLightPack, CSimpleStringA &strNewVersion);
  349. static void HttpsLogCallBack(const char* logtxt);
  350. bool isWork();
  351. int changeFileAtt(const char* path);
  352. private:
  353. virtual void OnStateTrans(int iSrcState, int iDstState);
  354. virtual void OnSysVarEvent(const char *pszKey, const char *pszValue,const char *pszOldValue,const char *pszEntityName);
  355. virtual ErrorCodeEnum OnInit();
  356. virtual ErrorCodeEnum OnExit();
  357. enum{s1, s2, s3, s4, s5, s6, s7};
  358. BEGIN_FSM_STATE(CUpgradeTaskFSM)
  359. FSM_STATE_ENTRY(s1, "Start",s1_on_entry,s1_on_exit,s1_on_event)//计算hash值
  360. FSM_STATE_ENTRY(s2, "DealTask",s2_on_entry,s2_on_exit,s2_on_event)//处理上个任务,反馈任务结果,并根据任务状态跳转到其他状态
  361. FSM_STATE_ENTRY(s3, "Poll",s3_on_entry,s3_on_exit,s3_on_event)//查询任务
  362. FSM_STATE_ENTRY(s4, "Download", s4_on_entry, s4_on_exit, s4_on_event)//下载安装包
  363. FSM_STATE_ENTRY(s5, "Install", s5_on_entry, s5_on_exit, s5_on_event)//安装升级包
  364. FSM_STATE_ENTRY(s6, "Switch", s6_on_entry, s6_on_exit, s6_on_event)//进行版本切换
  365. FSM_STATE_ENTRY(s7, "Disable", s7_on_entry, s7_on_exit, s7_on_event)//静止状态
  366. END_FSM_STATE()
  367. BEGIN_FSM_RULE(CUpgradeTaskFSM,s1)
  368. FSM_RULE_ENTRY_ANY(s1, s2, Event_StartDealTask)
  369. FSM_RULE_ENTRY_ANY(s2, s3, Event_StartPoll)
  370. FSM_RULE_ENTRY(s2, s4, Event_EndQueryCurrTask, 4)
  371. FSM_RULE_ENTRY(s2, s5, Event_EndQueryCurrTask, 5)
  372. FSM_RULE_ENTRY(s2, s6, Event_EndQueryCurrTask, 6)
  373. FSM_RULE_ENTRY_ANY(s3, s4, Event_StartDownload)
  374. FSM_RULE_ENTRY_ANY(s4, s5, Event_StartInstall)
  375. FSM_RULE_ENTRY_ANY(s4, s3, Event_StartPoll)//任务取消进入S3
  376. FSM_RULE_ENTRY_ANY(s4, s2, Event_StartDealTask)//下载失败进入S2
  377. FSM_RULE_ENTRY_ANY(s5, s6, Event_StartSwitch)
  378. FSM_RULE_ENTRY_ANY(s5, s2, Event_StartDealTask)//安装失败进入S2
  379. FSM_RULE_ENTRY_ANY(s6, s2, Event_StartDealTask)//无需重启框架和系统切换成功进入S2
  380. FSM_RULE_ENTRY_ANY(s6, s3, Event_StartPoll)//取消任务进入S3
  381. FSM_RULE_ENTRY_ANY(s6, s7, Event_PreRestart)//重启服务
  382. END_FSM_RULE()
  383. private:
  384. //完成
  385. void s1_on_entry();
  386. void s1_on_exit();
  387. unsigned int s1_on_event(FSMEvent* event);
  388. //完成
  389. void s2_on_entry();
  390. void s2_on_exit();
  391. unsigned int s2_on_event(FSMEvent* event);
  392. //完成
  393. void s3_on_entry();
  394. void s3_on_exit();
  395. unsigned int s3_on_event(FSMEvent* event);
  396. //完成
  397. void s4_on_entry();
  398. void s4_on_exit();
  399. unsigned int s4_on_event(FSMEvent* event);
  400. //完成
  401. void s5_on_entry();
  402. void s5_on_exit();
  403. unsigned int s5_on_event(FSMEvent* event);
  404. //完成
  405. void s6_on_entry();
  406. void s6_on_exit();
  407. unsigned int s6_on_event(FSMEvent* event);
  408. //
  409. void s7_on_entry();
  410. void s7_on_exit();
  411. unsigned int s7_on_event(FSMEvent* event);
  412. private:
  413. list<CSimpleStringA> m_DepWhitelist; //dep文件夹白名单
  414. list<CSimpleStringA> m_DirBlacklist; //整体文件夹黑名单
  415. list<CSimpleStringA> m_FileBlacklist; //整体文件黑名单
  416. public:
  417. map<CSimpleStringA, CSimpleStringA> m_fileSM3Map; // 版本文件hash值集合
  418. CTaskInfo m_currentTask; //当前的任务缓存变量
  419. CVersion m_currentVersion; //当前终端版本
  420. CenterUrl m_centerUrl;//访问总行的url地址集合
  421. int m_eachDownloadLen;//每次下载数据长度阈值(M)
  422. int m_newEachDownloadLen;//新的每次下载数据长度阈值(k)
  423. bool m_PrintHttpLog; //是否打印通讯日志
  424. bool m_startFlag; //升级实体启动标志位,默认是不开,
  425. HashScanSet m_hashScanSet;//扫描文件hash设置
  426. bool m_isSM3HashSucc;//hash是否计算成功
  427. bool isSendHash;//hash是否发送
  428. CSimpleStringA m_fileSM3ListHash;//SM3 64位hash
  429. CSimpleStringA m_fileSM3List;//版本文件hash集合字符串
  430. DWORD m_beginSendSM3Time;//开始发送sm3hahs时间
  431. int m_queryNewTaskCount;//查询新任务时无任务次数
  432. bool m_bDownloadIdle; //是否下载空闲 true: 不能下载,false: 可下载
  433. bool m_bTaskCancel; //是否任务取消 true: 任务取消,false: 未取消
  434. int m_iBlackFileCount; //黑名单文件数量
  435. CSimpleStringA m_strPreTaskId; //预检查taskId
  436. int m_bNeedHash;//是否需要hash对比查询任务
  437. bool m_bSwitchFlag;//是否启动后切换流程直接进入标志
  438. bool m_bRollbackTask;//是否已经处于回退流程。
  439. };
  440. #endif //RVC_MOD_UPGRADETASK_FSM_H_