📄 smplfsys.h
字号:
/* ***** BEGIN LICENSE BLOCK *****
* Version: RCSL 1.0/RPSL 1.0
*
* Portions Copyright (c) 1995-2002 RealNetworks, Inc. All Rights Reserved.
*
* The contents of this file, and the files included with this file, are
* subject to the current version of the RealNetworks Public Source License
* Version 1.0 (the "RPSL") available at
* http://www.helixcommunity.org/content/rpsl unless you have licensed
* the file under the RealNetworks Community Source License Version 1.0
* (the "RCSL") available at http://www.helixcommunity.org/content/rcsl,
* in which case the RCSL will apply. You may also obtain the license terms
* directly from RealNetworks. You may not use this file except in
* compliance with the RPSL or, if you have a valid RCSL with RealNetworks
* applicable to this file, the RCSL. Please see the applicable RPSL or
* RCSL for the rights, obligations and limitations governing use of the
* contents of the file.
*
* This file is part of the Helix DNA Technology. RealNetworks is the
* developer of the Original Code and owns the copyrights in the portions
* it created.
*
* This file, and the files included with this file, is distributed and made
* available on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
* EXPRESS OR IMPLIED, AND REALNETWORKS HEREBY DISCLAIMS ALL SUCH WARRANTIES,
* INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, FITNESS
* FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
*
* Technology Compatibility Kit Test Suite(s) Location:
* http://www.helixcommunity.org/content/tck
*
* Contributor(s):
*
* ***** END LICENSE BLOCK ***** */
#ifndef _SMPLFSYS_H_
#define _SMPLFSYS_H_
#include <stdio.h>
/****************************************************************************
*
* Function:
*
* HXCreateInstance()
*
* Purpose:
*
* Function implemented by all plugin DLL's to create an instance of
* any of the objects supported by the DLL. This method is similar to
* Window's CoCreateInstance() in its purpose, except that it only
* creates objects from this plugin DLL.
*
* NOTE: Aggregation is never used. Therefore an outer unknown is
* not passed to this function, and you do not need to code for this
* situation.
*
*/
STDAPI HXCreateInstance(IUnknown** /*OUT*/ ppIUnknown);
/****************************************************************************
*
* Function:
*
* HXShutdown()
*
* Purpose:
*
* Function implemented by all plugin DLL's to free any *global*
* resources. This method is called just before the DLL is unloaded.
*
*/
STDAPI HXShutdown(void);
// Forward declarations
class CHXGenericCallback;
#if defined(HELIX_FEATURE_PROGDOWN)
class CProgressiveDownloadMonitor;
#endif /* #if defined(HELIX_FEATURE_PROGDOWN) */
/////////////////////////////////////////////////////////////////////////////
//
// Class:
//
// CSimpleFileSystem
//
// Purpose:
//
// Example implementation of a basic file system.
//
class CSimpleFileSystem : public IHXPlugin,
public IHXFileSystemObject
{
private:
LONG32 m_lRefCount;
static const IID zm_myIID;
static const char* const zm_pDescription;
static const char* const zm_pCopyright;
static const char* const zm_pMoreInfoURL;
static const char* const zm_pShortName;
static const char* const zm_pProtocol;
CHXString m_base_path;
IUnknown* m_pContext;
IHXValues* m_options;
UINT32 m_ulMaxIterationLevel;
public:
CSimpleFileSystem();
~CSimpleFileSystem();
BOOL m_bDisableMemoryMappedIO;
BOOL m_bEnableFileLocking;
UINT32 m_ulChunkSize;
IUnknown* m_pCommonObj;
// *** IUnknown methods ***
STDMETHOD(QueryInterface) (THIS_
REFIID riid,
void** ppvObj);
STDMETHOD_(ULONG32,AddRef) (THIS);
STDMETHOD_(ULONG32,Release) (THIS);
// *** IHXPlugin methods ***
/************************************************************************
* Method:
* IHXPlugin::GetPluginInfo
* Purpose:
* Returns the basic information about this plugin. Including:
*
* bLoadMultiple whether or not this plugin DLL can be loaded
* multiple times. All File Formats must set
* this value to TRUE.
* pDescription which is used in about UIs (can be NULL)
* pCopyright which is used in about UIs (can be NULL)
* pMoreInfoURL which is used in about UIs (can be NULL)
*/
STDMETHOD(GetPluginInfo) (THIS_
REF(BOOL) /*OUT*/ bLoadMultiple,
REF(const char*) /*OUT*/ pDescription,
REF(const char*) /*OUT*/ pCopyright,
REF(const char*) /*OUT*/ pMoreInfoURL,
REF(ULONG32) /*OUT*/ ulVersionNumber
);
/************************************************************************
* Method:
* IHXPlugin::InitPlugin
* Purpose:
* Initializes the plugin for use. This interface must always be
* called before any other method is called. This is primarily needed
* so that the plugin can have access to the context for creation of
* IHXBuffers and IMalloc.
*/
STDMETHOD(InitPlugin) (THIS_
IUnknown* /*IN*/ pContext);
// *** IHXFileSystemObject methods ***
STDMETHOD(GetFileSystemInfo) (THIS_
REF(const char*) /*OUT*/ pShortName,
REF(const char*) /*OUT*/ pProtocol);
STDMETHOD(InitFileSystem) (THIS_ IHXValues* options);
STDMETHOD(CreateFile) (THIS_
IUnknown** /*OUT*/ ppFileObject);
STDMETHOD(CreateDir) (THIS_
IUnknown** /*OUT*/ ppDirObject);
};
#ifdef _MACINTOSH
enum SeekReason
{
REINIT_SEEK = 0,
EXTERNAL_SEEK,
PRE_TELL_SEEK,
POST_TELL_SEEK
};
#endif
/////////////////////////////////////////////////////////////////////////////
//
// Class:
//
// CSimpleFileObject
//
// Purpose:
//
// Example implementation of a basic file system file object.
//
class CSimpleFileObject : public IHXFileObject,
public IHXDirHandler,
public IHXFileStat,
public IHXFileExists,
public IHXGetFileFromSamePool,
public IHXRequestHandler,
public IHXFileRename,
public IHXFileRemove,
public IHXFileMove,
public IHXThreadSafeMethods
#if defined(HELIX_FEATURE_PROGDOWN)
, public CProgressiveDownloadMonitorResponse
#endif /* #if defined(HELIX_FEATURE_PROGDOWN) */
{
private:
UINT32 m_ulSize;
UINT32 m_ulPos;
BOOL m_bCanBeReOpened;
void UpdateFileNameMember();
LONG32 m_lRefCount;
UINT32 m_ulFlags;
UINT32 m_ulMaxIterationLevel;
#ifdef USE_THREADSAFE_SCHEDULER
IHXThreadSafeScheduler* m_pScheduler;
#else
IHXScheduler* m_pScheduler;
#endif //USE_THREADSAFE_SCHEDULER
IUnknown* m_pContext;
IHXCommonClassFactory* m_pCommonClassFactory;
IHXFileResponse* m_pFileResponse;
CSimpleFileSystem* m_pFileSystem;
IHXRequest* m_pRequest;
IHXDescriptorRegistration* m_pDescriptorReg;
BOOL m_bLocalClose;
IHXDirHandlerResponse* m_pDirResponse;
char* m_pFilename;
#ifdef _MACINTOSH
CMacAsyncFile* m_pDataFile; /* cross-platform file object */
#else
IHXDataFile* m_pDataFile; /* cross-platform file object */
#endif
int m_nFd;
CHXString m_base_path;
BOOL m_bAsyncAccess;
BOOL m_bInRead;
BOOL m_bReadPending;
BOOL m_bAsyncReadPending;
UINT32 m_ulPendingReadCount;
CFindFile* m_pDirList;
IUnknown* m_pUnknownUserContext;
UINT32 m_ulPendingSeekOffset;
UINT16 m_usPendingSeekWhence;
void GetFullPathname(const char* pPath, CHXString* pPathname);
BOOL m_bReadCancelled;
HX_RESULT ActualAsyncReadDone(HX_RESULT result, IHXBuffer* pBuffer);
HX_RESULT ActualAsyncSeekDone(HX_RESULT result);
HX_RESULT DoRead(REF(BOOL) rbProgFail);
HX_RESULT DoSeek(REF(HX_RESULT) rSeekDoneResult);
void SeekBackwards(UINT32 ulNumBytes);
HX_RESULT FinishDoRead(UINT32 actual, REF(IHXBuffer*) pBuffer);
#ifdef _MACINTOSH
class SMPLAsyncResponse : public CMacAsyncFileResponse
{
public:
SMPLAsyncResponse(CSimpleFileObject* pFileObject);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -