My Project
Public Member Functions | Static Public Member Functions | List of all members
ParaEngine::CZipArchive Class Reference

Both the zip and ParaEngine's pkg file encryption logics are supported. More...

#include <ZipArchive.h>

Inheritance diagram for ParaEngine::CZipArchive:
ParaEngine::CArchive ParaEngine::IAttributeFields ParaEngine::IObject ParaEngine::CRefCounted

Public Member Functions

 CZipArchive (bool bIgnoreCase)
 
virtual DWORD GetType ()
 
 ATTRIBUTE_DEFINE_CLASS (CZipArchive)
 
 ATTRIBUTE_METHOD1 (CZipArchive, SetBaseDirectory_s, const char *)
 
 ATTRIBUTE_METHOD1 (CZipArchive, GetRootDirectory_s, const char **)
 
 ATTRIBUTE_METHOD1 (CZipArchive, SetRootDirectory_s, const char *)
 
virtual int InstallFields (CAttributeClass *pClass, bool bOverride)
 this class should be implemented if one wants to add new attribute. More...
 
virtual bool Open (const string &sArchiveName, int nPriority)
 open archive
 
virtual void Close ()
 close archive
 
virtual bool DoesFileExist (const string &filename)
 Check whether a given file exists. More...
 
virtual bool OpenFile (const char *filename, FileHandle &handle)
 Open a file for immediate reading. More...
 
virtual bool OpenFile (const ArchiveFileFindItem *item, FileHandle &handle)
 Open a file for immediate reading. More...
 
bool OpenMemFile (const char *buffer, DWORD nLen, bool bDeleteBuffer=true)
 
virtual DWORD GetFileSize (FileHandle &handle)
 get file size. More...
 
virtual bool ReadFile (FileHandle &handle, LPVOID lpBuffer, DWORD nNumberOfBytesToRead, LPDWORD lpNumberOfBytesRead)
 read file. More...
 
virtual bool ReadFileRaw (FileHandle &handle, LPVOID *lppBuffer, LPDWORD pnCompressedSize, LPDWORD pnUncompressedSize)
 read the raw (may be compressed file) More...
 
virtual bool CloseFile (FileHandle &hFile)
 close file. More...
 
virtual void SetRootDirectory (const string &filename)
 set root directory More...
 
const std::string & GetRootDirectory ()
 get root directory. More...
 
virtual void SetBaseDirectory (const char *filename)
 set the base directory to be removed from the relative path of all files in the zip file. More...
 
virtual void FindFiles (CSearchResult &result, const string &sRootPath, const string &sFilePattern, int nSubLevel)
 this is a recursive function. More...
 
bool GeneratePkgFile (const char *filename)
 Generate a pkg file which is equivalent to the currently loaded zip file. More...
 
bool GeneratePkgFile2 (const char *filename)
 
int GetFileCount ()
 get total file count. More...
 
virtual bool IsIgnoreCase () const
 
- Public Member Functions inherited from ParaEngine::CArchive
 ATTRIBUTE_DEFINE_CLASS (CArchive)
 
virtual const std::string & GetIdentifier ()
 
const string & GetArchiveName () const
 
virtual bool IsArchive (const std::string &sFilename)
 whether the archive represent the given file. More...
 
virtual bool WriteFile (FileHandle &handle, LPCVOID lpBuffer, DWORD nNumberOfBytesToWrite, LPDWORD lpNumberOfBytesWritten)
 
virtual bool CreateNewFile (const char *filename, FileHandle &handle, bool bAutoMakeFilePath=true)
 create a new file for writing More...
 
- Public Member Functions inherited from ParaEngine::IAttributeFields
virtual int GetAttributeClassID ()
 attribute class ID should be identical, unless one knows how overriding rules work. More...
 
virtual const char * GetAttributeClassName ()
 a static string, describing the attribute class object's name
 
virtual const char * GetAttributeClassDescription ()
 a static string, describing the attribute class object
 
virtual int GetChildAttributeColumnCount ()
 we support multi-dimensional child object. More...
 
virtual int GetChildAttributeObjectCount (int nColumnIndex=0)
 get the number of child objects (row count) in the given column. More...
 
virtual IAttributeFieldsGetChildAttributeObject (int nRowIndex, int nColumnIndex=0)
 
virtual IAttributeFieldsGetChildAttributeObject (const std::string &sName)
 get attribute by child object. More...
 
 ATTRIBUTE_METHOD1 (IAttributeFields, GetName_s, const char **)
 
 ATTRIBUTE_METHOD1 (IAttributeFields, SetName_s, const char *)
 
 ATTRIBUTE_METHOD (IAttributeFields, PrintObject_s)
 
 ATTRIBUTE_METHOD (IAttributeFields, AddRef_s)
 
 ATTRIBUTE_METHOD1 (IAttributeFields, GetRefCount_s, int *)
 
 ATTRIBUTE_METHOD1 (IAttributeFields, SetTime_s, int)
 
 ATTRIBUTE_METHOD1 (IAttributeFields, GetTime_s, int *)
 
 ATTRIBUTE_METHOD (IAttributeFields, Release_s)
 
virtual void SetIdentifier (const std::string &sID)
 
virtual bool IsModified ()
 whether some of the fields are modified.It is up to the implementation class to provide this functionality if necessary. More...
 
virtual void SetModified (bool bModified)
 set whether any field has been modified. More...
 
virtual bool ValidateFields ()
 validate all fields and return true if validation passed. More...
 
virtual string GetValidationMessage ()
 get the recent validation message due to the most recent call to ValidateFields()
 
virtual bool ResetField (int nFieldID)
 Reset the field to its initial or default value. More...
 
virtual bool InvokeEditor (int nFieldID, const std::string &sParameters)
 Invoke an (external) editor for a given field. More...
 
virtual bool AddChildAttributeObject (IAttributeFields *pChild, int nRowIndex=-1, int nColumnIndex=0)
 add child object. More...
 
virtual void * QueryObjectByName (const std::string &sObjectType)
 convert to object of a given type. More...
 
virtual void * QueryObject (int nObjectType)
 convert to object of a given type. More...
 
virtual int GetTime ()
 get the current local time in case it is animated in milli seconds frames. More...
 
virtual void SetTime (int nTime)
 
virtual CDynamicAttributeFieldGetDynamicField (const std::string &sName)
 Get a dynamic field with a given name. More...
 
virtual CDynamicAttributeFieldGetDynamicField (int nIndex)
 Get a dynamic field with a given index. More...
 
virtual const char * GetDynamicFieldNameByIndex (int nIndex)
 get field name by index
 
virtual int GetDynamicFieldCount ()
 how many dynamic field this object currently have. More...
 
virtual int SetDynamicField (const std::string &sName, const CVariable &value)
 set a dynamic field with a given name. More...
 
virtual int AddDynamicField (const std::string &sName, ATTRIBUTE_FIELDTYPE dwType)
 add dynamic field and return field index
 
virtual void RemoveAllDynamicFields ()
 remove all dynamic fields
 
virtual int SaveDynamicFieldsToString (std::string &output)
 save only text dynamic fields to fieldname = value text strings. More...
 
virtual int LoadDynamicFieldsFromString (const std::string &input)
 load only text dynamic fields from string More...
 
CAttributeClassGetAttributeClass ()
 get the main attribute class object. More...
 
void PrintObject ()
 print the content of this object to a text file at temp/doc/[ClassName].txt. More...
 
- Public Member Functions inherited from ParaEngine::IObject
virtual void Clone (IObject *obj) const
 Clone the object's contains to a pointer. More...
 
virtual IObjectClone () const
 Clone the object's contains and return a pointer to the newly created object. More...
 
virtual bool Equals (const IObject *obj) const
 Compare the object with another object. More...
 
virtual const ITypeGetType () const
 
virtual std::string ToString () const
 
WeakPtr_typeGetWeakReference ()
 get weak reference object. More...
 
virtual int ProcessObjectEvent (const ObjectEvent &event)
 this function is only used to backward compatibility of ParaObject:AddEvent() function. More...
 
- Public Member Functions inherited from ParaEngine::CRefCounted
void addref () const
 add reference count of the object. More...
 
bool delref () const
 decrease reference count of the object. More...
 
int GetRefCount () const
 get the reference count
 
virtual int Release ()
 
CRefCountedAddToAutoReleasePool ()
 addref and releases the ownership sometime soon automatically (usually at the end of the current frame). More...
 

Static Public Member Functions

static DWORD TypeID ()
 
static bool Decompress (LPVOID lpCompressedBuffer, DWORD nCompressedSize, LPVOID lpUnCompressedBuffer, DWORD nUncompressedSize)
 decompress a file buffer
 
- Static Public Member Functions inherited from ParaEngine::CArchive
static DWORD TypeID ()
 
- Static Public Member Functions inherited from ParaEngine::IAttributeFields
static HRESULT GetAttributeClassID_s (IAttributeFields *cls, int *p1)
 
static HRESULT GetAttributeClassName_s (IAttributeFields *cls, const char **p1)
 
static bool OpenWithDefaultEditor (const char *sFilename, bool bWaitOnReturn=false)
 Open a given file with the default registered editor in the game engine. More...
 

Additional Inherited Members

- Public Types inherited from ParaEngine::IAttributeFields
typedef ParaEngine::weak_ptr< IObject, IAttributeFieldsWeakPtr_type
 
- Public Types inherited from ParaEngine::IObject
typedef ParaEngine::weak_ptr< IObjectWeakPtr_type
 
- Protected Member Functions inherited from ParaEngine::IAttributeFields
virtual CAttributeClassCreateAttributeClass ()
 initialize fields
 
virtual CDynamicAttributesSetGetDynamicAttributes (bool bCreateIfNotExist=false)
 
- Protected Attributes inherited from ParaEngine::CArchive
string m_filename
 file name
 
FileHandle m_archiveHandle
 
bool m_bOpened
 
int m_nPriority
 
- Protected Attributes inherited from ParaEngine::IObject
WeakPtr_type m_weak_reference
 
- Protected Attributes inherited from ParaEngine::CRefCounted
int m_refcount
 

Detailed Description

Both the zip and ParaEngine's pkg file encryption logics are supported.

pkg file is a slightly encrypted version of zip file.

Load Archive File Logics

if(sArchiveName is "[filename].pkg") then Load "[filename].pkg" return end Suppose the loaded sArchiveName is "[filename].zip", if(At debug mode) then if "[filename].zip" does not exist then if "[filename].pkg" exists then Load "[filename].pkg" else No file loaded. end else if "[filename].pkg" exists and its modified date is newer than the "[filename].zip" then Load "[filename].pkg" else Load "[filename].zip" generate a new file called "[filename].pkg" based on "[filename].zip" end end else if "[filename].zip" exist then Load "[filename].zip" else if "[filename].pkg" exist then Load "[filename].pkg" else No file loaded. end end

ZIP file logics

It uses the ZIP file's CentralDirectory record at the end of the zip file to build the file list for random file access.

ParaEngine pkg File Format

char[4] <file type="" id>=""> ".pkg" byte[4] <pkg file="" version>=""> 0.0.0.1 [int] <length of="" string>=""> [string] "ParaEngine Tech Studio Package File Format. Please note that content in this file is meant to be protected and copyrighted by their author(s). Decoding this pkg file is illegal." [int] reserved1 [int] reserved2 [int] reserved3 [int] reserved4 [int] Central Directory Size in Bytes [int] number of directory record [item 1]: LenOfFilename, filename, compression method, compressed size,uncompressed size, fileDataPosition(this field is encrypted) ... [item n]

... [data n]

Member Function Documentation

§ CloseFile()

bool CZipArchive::CloseFile ( FileHandle hFile)
virtual

close file.

Implements ParaEngine::CArchive.

§ DoesFileExist()

bool CZipArchive::DoesFileExist ( const string &  filename)
virtual

Check whether a given file exists.

Parameters
filenamefile name to check

Implements ParaEngine::CArchive.

§ FindFiles()

void CZipArchive::FindFiles ( CSearchResult result,
const string &  sRootPath,
const string &  sFilePattern,
int  nSubLevel 
)
virtual

this is a recursive function.

Finding a file inside the zip. search files at once.

See also
CSearchResult the current version of this function can support only one query at a time. The search result is invalid if called intermittently
Parameters
sRootPaththe parent path inside the zip where to search for. for example: "", "xmodel/","xmodel/models/". Other format is not acceptable
sFilePatternfile pattern, e.g. "*.x" (all files with x extension), "*" (any files), "*."(directories only)
nSubLevelhow many sub folders of sRootPath to look into. default value is 0, which only searches the sRootPath folder. Note: currently only we only support nSubLevel=0

Reimplemented from ParaEngine::CArchive.

§ GeneratePkgFile()

bool CZipArchive::GeneratePkgFile ( const char *  filename)

Generate a pkg file which is equivalent to the currently loaded zip file.

This function can only be called, when a zip file has been successfully loaded.

Parameters
filenamethe pkg file name to be generated. It will overwrite existing file
Returns
true if successful.

§ GetFileCount()

int CZipArchive::GetFileCount ( )

get total file count.

§ GetFileSize()

DWORD CZipArchive::GetFileSize ( FileHandle handle)
virtual

get file size.

Implements ParaEngine::CArchive.

§ GetRootDirectory()

const std::string & ParaEngine::CZipArchive::GetRootDirectory ( )

get root directory.

all relative file path in zip files is regarded as relative to this directory.

§ InstallFields()

int ParaEngine::CZipArchive::InstallFields ( CAttributeClass pClass,
bool  bOverride 
)
virtual

this class should be implemented if one wants to add new attribute.

This function is always called internally.

Reimplemented from ParaEngine::IAttributeFields.

§ OpenFile() [1/2]

bool CZipArchive::OpenFile ( const char *  filename,
FileHandle handle 
)
virtual

Open a file for immediate reading.

It could be either a zip file or a pkg file. call getBuffer() to retrieval the data

Parameters
filenamethe file name to open
handleto the opened file.
Returns
: true if succeeded.

Implements ParaEngine::CArchive.

§ OpenFile() [2/2]

bool CZipArchive::OpenFile ( const ArchiveFileFindItem item,
FileHandle handle 
)
virtual

Open a file for immediate reading.

call getBuffer() to retrieval the data

Parameters
itemthe file find item to open
handleto the opened file.
Returns
: true if succeeded.

Implements ParaEngine::CArchive.

§ ReadFile()

bool CZipArchive::ReadFile ( FileHandle handle,
LPVOID  lpBuffer,
DWORD  nNumberOfBytesToRead,
LPDWORD  lpNumberOfBytesRead 
)
virtual

read file.

Implements ParaEngine::CArchive.

§ ReadFileRaw()

bool CZipArchive::ReadFileRaw ( FileHandle handle,
LPVOID *  lppBuffer,
LPDWORD  pnCompressedSize,
LPDWORD  pnUncompressedSize 
)
virtual

read the raw (may be compressed file)

Parameters
lppBufferthe buffer to hold the (compressed) output data. one need to use the SAFE_DELETE_ARRAY() to delete the output data.
pnCompressedSizeoutput the size of the compressed data
pnUncompressedSize:outputthe size of the uncompressed data. if 0, it means that the data is not compressed.
Returns
true if succeed.

Reimplemented from ParaEngine::CArchive.

§ SetBaseDirectory()

void ParaEngine::CZipArchive::SetBaseDirectory ( const char *  filename)
virtual

set the base directory to be removed from the relative path of all files in the zip file.

call this function only once, it will actually modify the relative file path.

Reimplemented from ParaEngine::CArchive.

§ SetRootDirectory()

void CZipArchive::SetRootDirectory ( const string &  filename)
virtual

set root directory

Parameters
filenamethe parent directory filename will be regarded as the root directory. m_bRelativePath will be set to false if filename or its parent directory is ""; otherwise it will be set to true.

Reimplemented from ParaEngine::CArchive.


The documentation for this class was generated from the following files: