minifileobj.h
上传用户:zhongxx05
上传日期:2007-06-06
资源大小:33641k
文件大小:7k
源码类别:

Symbian

开发平台:

C/C++

  1. /* ***** BEGIN LICENSE BLOCK ***** 
  2.  * Version: RCSL 1.0/RPSL 1.0 
  3.  *  
  4.  * Portions Copyright (c) 1995-2002 RealNetworks, Inc. All Rights Reserved. 
  5.  *      
  6.  * The contents of this file, and the files included with this file, are 
  7.  * subject to the current version of the RealNetworks Public Source License 
  8.  * Version 1.0 (the "RPSL") available at 
  9.  * http://www.helixcommunity.org/content/rpsl unless you have licensed 
  10.  * the file under the RealNetworks Community Source License Version 1.0 
  11.  * (the "RCSL") available at http://www.helixcommunity.org/content/rcsl, 
  12.  * in which case the RCSL will apply. You may also obtain the license terms 
  13.  * directly from RealNetworks.  You may not use this file except in 
  14.  * compliance with the RPSL or, if you have a valid RCSL with RealNetworks 
  15.  * applicable to this file, the RCSL.  Please see the applicable RPSL or 
  16.  * RCSL for the rights, obligations and limitations governing use of the 
  17.  * contents of the file.  
  18.  *  
  19.  * This file is part of the Helix DNA Technology. RealNetworks is the 
  20.  * developer of the Original Code and owns the copyrights in the portions 
  21.  * it created. 
  22.  *  
  23.  * This file, and the files included with this file, is distributed and made 
  24.  * available on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER 
  25.  * EXPRESS OR IMPLIED, AND REALNETWORKS HEREBY DISCLAIMS ALL SUCH WARRANTIES, 
  26.  * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, FITNESS 
  27.  * FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. 
  28.  * 
  29.  * Technology Compatibility Kit Test Suite(s) Location: 
  30.  *    http://www.helixcommunity.org/content/tck 
  31.  * 
  32.  * Contributor(s): 
  33.  *  
  34.  * ***** END LICENSE BLOCK ***** */ 
  35. #ifndef _MINIFILEOBJ_H_
  36. #define _MINIFILEOBJ_H_
  37. /****************************************************************************
  38.  * Includes
  39.  */
  40. #include "hxfiles.h"  /* IHXFileObject, IHXRequestHandler, etc. */
  41. #if defined (_WINDOWS ) && defined (_WIN32)
  42. #include <winbase.h>
  43. #endif
  44. /****************************************************************************
  45.  *
  46.  *  CHXMiniFileObject Class
  47.  *
  48.  *  This class inherits the interfaces required to create a File Object,
  49.  *  which is used by the File System plug-in to handle file I/O. This class
  50.  *  implements the IHXFileObject interface which handles the actual low
  51.  *  level file access. The IHXRequestHandler interface is used to obtain
  52.  *  the requested URL; while the IHXFileExists interface determines if the
  53.  *  requested file actually exists. Since we are using COM, this class also
  54.  *  inherits COM's IUnknown interface to handle reference counting and
  55.  *  interface query.
  56.  */
  57. class CHXMiniFileObject :  public IHXFileObject,
  58.    public IHXDirHandler,
  59.    public IHXRequestHandler,
  60.    public IHXFileExists,
  61.    public IHXFileStat,
  62.    public IHXGetFileFromSamePool
  63. {
  64. public:
  65.     CHXMiniFileObject(IHXCommonClassFactory* pClassFactory,
  66.       const char* pBasePath);
  67.     ~CHXMiniFileObject(void);
  68.     /************************************************************************
  69.      *  IHXFileObject Interface Methods
  70.      */
  71.     STDMETHOD(Init       ) (THIS_ UINT32 access,IHXFileResponse* pFileResp);
  72.     STDMETHOD(GetFilename) (THIS_ REF(const char*) pFileName);
  73.     STDMETHOD(Read       ) (THIS_ UINT32 byteCount);
  74.     STDMETHOD(Write      ) (THIS_ IHXBuffer* pDataToWrite);
  75.     STDMETHOD(Seek       ) (THIS_ UINT32 offset, BOOL bRelative);
  76.     STDMETHOD(Advise     ) (THIS_ UINT32 useage);
  77.     STDMETHOD(Close      ) (THIS);
  78.     /************************************************************************
  79.      *  IHXRequestHandler Interface Methods
  80.      */
  81.     STDMETHOD(SetRequest) (THIS_     IHXRequest*  pRequest);
  82.     STDMETHOD(GetRequest) (THIS_ REF(IHXRequest*) pRequest);
  83.     /************************************************************************
  84.      *  IHXFileExists Interface Methods
  85.      */
  86.     STDMETHOD(DoesExist)(THIS_ const char* pFilePath,
  87.  IHXFileExistsResponse* pFileResponse);
  88.     /************************************************************************
  89.      *  IUnknown COM Interface Methods
  90.      */
  91.     STDMETHOD (QueryInterface ) (THIS_ REFIID ID, void** ppInterfaceObj);
  92.     STDMETHOD_(UINT32, AddRef ) (THIS);
  93.     STDMETHOD_(UINT32, Release) (THIS);
  94.     /************************************************************************
  95.      *  IHXFileStat Interface Methods
  96.      */
  97.     STDMETHOD(Stat)(THIS_ IHXFileStatResponse* pFileStatResponse);
  98.     /************************************************************************
  99.      *  IHXDirHandler Interface Methods
  100.      */
  101.     STDMETHOD(InitDirHandler)(THIS_ IHXDirHandlerResponse* pDirResponse);
  102.     /************************************************************************
  103.      *  IHXDirHandler Interface Methods
  104.      */
  105.     STDMETHOD(CloseDirHandler) (THIS);
  106.     /************************************************************************
  107.      *  IHXDirHandler Interface Methods
  108.      */
  109.     STDMETHOD(MakeDir) (THIS);
  110.     /************************************************************************
  111.      *  IHXDirHandler Interface Methods
  112.      */
  113.     STDMETHOD(ReadDir) (THIS);
  114.     /************************************************************************
  115.      *  IHXGetFileFromSamePool Interface Methods
  116.      */
  117.     STDMETHOD(GetFileObjectFromPool) (THIS_ IHXGetFileFromSamePoolResponse* response);
  118. private:
  119.     /****** Private Class Variables ****************************************/
  120.     INT32                   m_RefCount;       // Object's reference count
  121.     IHXCommonClassFactory*  m_pClassFactory;  // Creates common classes
  122.     IHXFileResponse*        m_pFileResponse;  // Provides completion notif.
  123.     FILE*                   m_pFile;          // Actual file pointer
  124.     char*     m_pFilename;      // Object's copy of file name
  125.     IHXRequest*             m_pRequest;       // Used to get requested URL
  126.     char*                   m_pBasePath;      // Platform's root path
  127.     UINT32                  m_FileAccessMode; // Current file access mode
  128.     IHXDirHandlerResponse*  m_pDirResponse;   // Target for dir functions
  129. #if defined (_WINDOWS ) && defined (_WIN32)
  130.     HANDLE m_hFileHandle; // Used for WIN32 ReadDir()
  131.     WIN32_FIND_DATA m_FileInfo;            // Used for WIN32 ReadDir()
  132. #endif
  133.     BOOL m_bInReadDone;
  134.     IHXBuffer* m_pPendingReadBuf;
  135.     /****** Private Class Methods ******************************************/
  136.     STDMETHOD(OpenFile)  (THIS_ UINT32 fileMode);
  137.     STDMETHOD(ConvertToPlatformPath)(THIS_ REF(char*)  pFilePathPlatform,
  138.      const char* pFilePath);
  139. };
  140. #endif  /* _MINIFILEOBJ_H_ */