/** @file ReleasePatch.h
@brief 文件打包:patch工具 第一版测试
* Copyright (c) 2007,第九城市游戏研发中心
* All rights reserved.
*
* 当前版本:2009-08-06
* 作 者:和萌
* 完成日期:
*
* 取代版本:
* 作 者:
* 完成日期:
*/
// 说明 [8/6/2009 hemeng]
// 必须将打包配置文件至于可执行文件同目录下
#pragma once
#include "Package.h"
#include "PatchDef.h"
#include "tinyxml.h"
#include "PatchHelper.h"
#include "resource.h"
#include "PatchReportSender.h"
#include "PatchLog.h"
#include "ResourceHelper.h"
class CReleasePatch
{
public:
CReleasePatch(const char* pszReleasePath);
~CReleasePatch(void);
bool ReleasePatchPackage();
string GetPatchLastError() {return m_strLastError;};
void Destroy();
void SetLaunchID(UINT nID);
protected:
CReleasePatch(void);
// 比较类型 [8/17/2009 hemeng]
enum PATCH_COMPARE_RESULT_TYPE
{
PCRT_ADD_FILE = 0,
PCRT_DELETE_FILE,
PCRT_UPDATE_FILE,
PCRT_DELETE_DIR,
};
// 初始化 [8/6/2009 hemeng]
bool _InitUpdating();
bool _IsPackageFile(string strFileName);
// 检查release目录下的version是否需要更新
bool _NeedUpdate();
// 获得包文件的相对路径 [8/31/2009 hemeng]
string _GetPackNameByFileName(string strFileName);
bool _Patch();
bool _AddFiles();
bool _UpdateFiles();
bool _DeleteUnuseFiles();
bool _DeleteUnuseDirs();
// 检查是否目录下的所有PKG文件 [8/6/2009 hemeng]
CPackage* _LoadPackage(string strPackFilePath);
// 从文件读取log数据 [8/6/2009 hemeng]
bool _LoadLogFile();
void _LoadCheckFiles(TiXmlElement* pElmt);
void _LoadVersion(TiXmlElement* pElmt);
bool _LoadFileList(TiXmlElement* pElmt,PATCH_COMPARE_RESULT_TYPE nType);
// 获取当前版本 [8/19/2009 hemeng]
bool _LoadCurrentVersion(string strPatchClientFileName);
// 转换文件路径为绝对路径 [8/6/2009 hemeng]
string _ConvertMediaFileName(const string strFilePath);
// 获取相对路径 [8/6/2009 hemeng]
string _ConvertRelPath(const string strFilePath);
// 装载安装位置下的所有包文件 [8/10/2009 hemeng]
bool _InitPackages();
// 添加包数据 [8/10/2009 hemeng]
bool _AddFilesToPackage(string strPackFileName,vector vFileList);
// strFileName为更新包中的文件名称 [8/31/2009 hemeng]
bool _AddFileToPackage(CPackage* pkPackage,string strFileName);
// 删除包数据 [8/10/2009 hemeng]
bool _DeleteFilesFromPackage(string strPackFileName,vector vFileList);
bool _DeleteFileFromPackage(CPackage* pkPackage,string strFileName);
bool _DeleteDirsFromPackage(string strPackFileName,vector vDirList);
bool _DeleteDirFromPackage(CPackage* pkPackge,SPackageDirInfo* pkDirInfo);
// 添加文件数据 [8/10/2009 hemeng]
bool _AddFile(string strFileName);
bool _UpdatePatchClientXML(string strXmlFilePath);
// Load local resource [8/21/2009 hemeng]
bool _CreateUpdateResourcePackage(string& strResFileName);
void* _LoadResourceInfo(DWORD& dwResSize);
bool _LoadPackConfigFile();
// 划分包文件及文件 [8/31/2009 hemeng]
void _PartFiles(vector vFiles,map>& mapPackFiles,vector& vPathFiles);
// 备份包,以防更新中出错 [9/1/2009 hemeng]
// bOK = true - 原包正常,仅做备份 [9/1/2009 hemeng]
// bOK = false - 原包错误,尝试恢复
// 操作成功则返回备份包路径,反之返回空字符串 [9/1/2009 hemeng]
string _SecurityPack(string strPackName);
// 创建备份文件系统 [9/7/2009 hemeng]
bool _MakeBackUpFile(string strPackName,string strBackUpFileName);
// 由备份文件恢复文件系统 [9/7/2009 hemeng]
bool _BackUpPack(string strPackName,string strBackUpData);
// 检查是否为客户端目录 [9/2/2009 hemeng]
bool _IsClientDir();
// 检查muxlauncher是否启动 [12/15/2009 hemeng]
bool _IsMuxLauncherEnabled();
protected:
CPackage* m_pkPackage; // patch包文件 [8/6/2009 hemeng]
string m_strReleasePath; // 释放目录 [8/6/2009 hemeng]
CPatchLog* m_pLog; // 更新日志 [9/4/2009 hemeng]
// 所有需要删除、更新、添加的文件及文件夹 [8/6/2009 hemeng]
// key为类型(删除、添加etc) 值为文件 key都为相对路径
map> m_mapUpdateFiles;
string m_NewVersion;
string m_OldVersion;
string m_CurrVersion;
bool m_bInit;
BYTE* m_pConfigFileBuffer; // package_config.xml数据
CPatchReportSender* m_pkReportSender;
HANDLE m_hdSigleObject; // 标志patch releaser唯一实例 [8/25/2009 hemeng]
bool m_bCreateLauncherThread; // 如果需要更新luncher,则需在退出更新时启动luncher [8/25/2009 hemeng]
string m_strLastError; // 最后一个错误 [8/25/2009 hemeng]
UINT m_nLaunchID; // lanuch的线程ID [8/31/2009 hemeng]
string m_strLauncherName;
map m_mapPackages; // 由配置文件获得的客户端目录中应为包文件夹 [8/31/2009 hemeng]
vector m_vCheckFiles; // 用于校验是否为客户端目录的文件 [9/2/2009 hemeng]
};