1
This commit is contained in:
207
replay/sv_filepublish.h
Normal file
207
replay/sv_filepublish.h
Normal file
@ -0,0 +1,207 @@
|
||||
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||||
//
|
||||
//=======================================================================================//
|
||||
|
||||
#ifndef SV_FILEPUBLISH_H
|
||||
#define SV_FILEPUBLISH_H
|
||||
|
||||
//----------------------------------------------------------------------------------------
|
||||
|
||||
#include "platform.h"
|
||||
#include "qlimits.h"
|
||||
#include "spew.h"
|
||||
#include "sv_basejob.h"
|
||||
#include "compression.h"
|
||||
|
||||
//----------------------------------------------------------------------------------------
|
||||
|
||||
class IFilePublisher;
|
||||
|
||||
//----------------------------------------------------------------------------------------
|
||||
|
||||
class IPublishCallbackHandler
|
||||
{
|
||||
public:
|
||||
virtual ~IPublishCallbackHandler() {}
|
||||
|
||||
virtual void OnPublishComplete( const IFilePublisher *pPublisher, void *pUserData ) = 0;
|
||||
virtual void OnPublishAborted( const IFilePublisher *pPublisher ) = 0;
|
||||
virtual void AdjustHeader( const IFilePublisher *pPublisher, void *pHeaderData ) = 0;
|
||||
};
|
||||
|
||||
//----------------------------------------------------------------------------------------
|
||||
|
||||
struct PublishFileParams_t
|
||||
{
|
||||
inline PublishFileParams_t()
|
||||
{
|
||||
V_memset( this, 0, sizeof( PublishFileParams_t ) );
|
||||
m_nCompressorType = COMPRESSORTYPE_BZ2;
|
||||
}
|
||||
|
||||
IPublishCallbackHandler *m_pCallbackHandler;
|
||||
const char *m_pOutFilename;
|
||||
uint8 *m_pSrcData;
|
||||
int m_nSrcSize;
|
||||
bool m_bHash;
|
||||
bool m_bFreeSrcData;
|
||||
bool m_bDeleteFile;
|
||||
void *m_pHeaderData;
|
||||
int m_nHeaderSize;
|
||||
void *m_pUserData;
|
||||
CompressorType_t m_nCompressorType;
|
||||
};
|
||||
|
||||
//----------------------------------------------------------------------------------------
|
||||
|
||||
//
|
||||
// Interface for publishing files to fileserver.
|
||||
//
|
||||
// NOTE: You can force an IFilePublisher to delete itself by calling EnableAutoDelete().
|
||||
//
|
||||
class IFilePublisher
|
||||
{
|
||||
public:
|
||||
virtual ~IFilePublisher() {}
|
||||
|
||||
enum PublishStatus_t
|
||||
{
|
||||
PUBLISHSTATUS_INVALID,
|
||||
PUBLISHSTATUS_OK,
|
||||
PUBLISHSTATUS_FAILED,
|
||||
PUBLISHSTATUS_ABORTED,
|
||||
};
|
||||
|
||||
//
|
||||
// NOTE: Call Compressed() and Hashed() when IsDone() is true or in OnPublishComplete() to find
|
||||
// out if compression/hashing succeeded.
|
||||
//
|
||||
// Setting bFreeSrcData to false will keep the publisher from deleting the initial source data.
|
||||
// Otherwise, the process is that buffers will be cleaned up as they are no longer needed - for
|
||||
// example, if compression is enabled, the initial buffer will be free'd if bFreeSrcData is true.
|
||||
//
|
||||
virtual void Publish( const PublishFileParams_t ¶ms ) = 0;
|
||||
virtual void AbortAndCleanup() = 0;
|
||||
virtual void FinishSynchronouslyAndCleanup() = 0;
|
||||
|
||||
virtual void Think() = 0;
|
||||
virtual PublishStatus_t GetStatus() const = 0;
|
||||
virtual bool IsDone() const = 0;
|
||||
virtual bool Compressed() const = 0; // If compression was requested, did it succeed?
|
||||
virtual bool Hashed() const = 0;
|
||||
virtual void GetHash( uint8 *pOut ) const = 0; // Writes 16 bytes to pOut
|
||||
virtual CompressorType_t GetCompressorType() const = 0;
|
||||
virtual int GetCompressedSize() const = 0;
|
||||
};
|
||||
|
||||
//----------------------------------------------------------------------------------------
|
||||
|
||||
IFilePublisher *SV_PublishFile( const PublishFileParams_t ¶ms );
|
||||
|
||||
//----------------------------------------------------------------------------------------
|
||||
|
||||
class CBasePublishJob : public CBaseJob
|
||||
{
|
||||
public:
|
||||
CBasePublishJob( JobPriority_t nPriority = JP_NORMAL, ISpewer *pSpewer = g_pDefaultSpewer );
|
||||
|
||||
virtual void GetOutputData( uint8 **ppData, uint32 *pDataSize ) const { *ppData = NULL; *pDataSize = 0; }
|
||||
virtual const char *GetOutputFilename() const { return NULL; }
|
||||
|
||||
protected:
|
||||
void SimulateDelay( int nDelay, const char *pThreadName ); // Seconds
|
||||
};
|
||||
|
||||
//----------------------------------------------------------------------------------------
|
||||
|
||||
class CLocalPublishJob : public CBasePublishJob
|
||||
{
|
||||
public:
|
||||
CLocalPublishJob( const char *pLocalFilename );
|
||||
|
||||
enum LocalPublishError_t
|
||||
{
|
||||
ERROR_SOURCE_FILE_DOES_NOT_EXIST,
|
||||
ERROR_INVALID_FILESERVER_PATH,
|
||||
ERROR_COULD_NOT_DELETE_TARGET_FILE,
|
||||
ERROR_RENAME_FAILED,
|
||||
};
|
||||
|
||||
private:
|
||||
virtual JobStatus_t DoExecute();
|
||||
|
||||
char m_szLocalFilename[MAX_OSPATH];
|
||||
};
|
||||
|
||||
CLocalPublishJob *SV_CreateLocalPublishJob( const char *pLocalFilename );
|
||||
|
||||
//----------------------------------------------------------------------------------------
|
||||
|
||||
class ICompressor;
|
||||
|
||||
class CCompressionJob : public CBasePublishJob
|
||||
{
|
||||
public:
|
||||
CCompressionJob( const uint8 *pSrcData, uint32 nSrcSize, CompressorType_t nType,
|
||||
bool *pOutCompressed, uint32 *pCompressedSize );
|
||||
|
||||
enum CompressionError_t
|
||||
{
|
||||
ERROR_FAILED_ZERO_LENGTH_DATA,
|
||||
ERROR_OK_COULDNOTCOMPRESS,
|
||||
ERROR_FAILED_OPENOUTFILE,
|
||||
};
|
||||
|
||||
private:
|
||||
virtual JobStatus_t DoExecute();
|
||||
virtual void GetOutputData( uint8 **ppData, uint32 *pDataSize ) const;
|
||||
|
||||
const uint8 *m_pSrcData;
|
||||
uint32 m_nSrcSize;
|
||||
char m_szOutFilename[ MAX_OSPATH ];
|
||||
bool *m_pCompressionResult;
|
||||
uint8 *m_pResult;
|
||||
unsigned int *m_pResultSize;
|
||||
ICompressor *m_pCompressor;
|
||||
};
|
||||
|
||||
//----------------------------------------------------------------------------------------
|
||||
|
||||
class CMd5Job : public CBasePublishJob
|
||||
{
|
||||
public:
|
||||
CMd5Job( const void *pSrcData, int nSrcSize, bool *pOutHashed, uint8 pOutHash[16],
|
||||
unsigned int pSeed[4] = NULL );
|
||||
|
||||
private:
|
||||
virtual JobStatus_t DoExecute();
|
||||
|
||||
const void *m_pSrcData;
|
||||
int m_nSrcSize;
|
||||
bool *m_pHashed;
|
||||
uint8 *m_pHash;
|
||||
unsigned int *m_pSeed;
|
||||
};
|
||||
|
||||
//----------------------------------------------------------------------------------------
|
||||
|
||||
class CDeleteLocalFileJob : public CBasePublishJob
|
||||
{
|
||||
public:
|
||||
CDeleteLocalFileJob( const char *pFilename );
|
||||
|
||||
enum CompressionError_t
|
||||
{
|
||||
ERROR_FILE_DOES_NOT_EXISTS,
|
||||
ERROR_COULD_NOT_DELETE,
|
||||
};
|
||||
|
||||
private:
|
||||
virtual JobStatus_t DoExecute();
|
||||
|
||||
char m_szFilename[ MAX_OSPATH ];
|
||||
};
|
||||
|
||||
//----------------------------------------------------------------------------------------
|
||||
|
||||
#endif // SV_FILEPUBLISH_H
|
Reference in New Issue
Block a user