summaryrefslogtreecommitdiff
path: root/replay/sv_filepublish.h
diff options
context:
space:
mode:
authorFluorescentCIAAfricanAmerican <[email protected]>2020-04-22 12:56:21 -0400
committerFluorescentCIAAfricanAmerican <[email protected]>2020-04-22 12:56:21 -0400
commit3bf9df6b2785fa6d951086978a3e66f49427166a (patch)
tree2c0f1f0c63c4832882bc93814ebd2c2b1c6224e5 /replay/sv_filepublish.h
downloadarchived-source-engine-2018-hl2-src-master.tar.xz
archived-source-engine-2018-hl2-src-master.zip
Diffstat (limited to 'replay/sv_filepublish.h')
-rw-r--r--replay/sv_filepublish.h207
1 files changed, 207 insertions, 0 deletions
diff --git a/replay/sv_filepublish.h b/replay/sv_filepublish.h
new file mode 100644
index 0000000..2dd76d2
--- /dev/null
+++ b/replay/sv_filepublish.h
@@ -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 &params ) = 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 &params );
+
+//----------------------------------------------------------------------------------------
+
+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