diff options
Diffstat (limited to 'replay/baserecordingsessionblock.h')
| -rw-r--r-- | replay/baserecordingsessionblock.h | 108 |
1 files changed, 108 insertions, 0 deletions
diff --git a/replay/baserecordingsessionblock.h b/replay/baserecordingsessionblock.h new file mode 100644 index 0000000..0b3bda4 --- /dev/null +++ b/replay/baserecordingsessionblock.h @@ -0,0 +1,108 @@ +//========= Copyright Valve Corporation, All rights reserved. ============// +// +//=======================================================================================// + +#ifndef BASERECORDINGSESSIONBLOCK_H +#define BASERECORDINGSESSIONBLOCK_H +#ifdef _WIN32 +#pragma once +#endif + +//---------------------------------------------------------------------------------------- + +#include "replay/replayhandle.h" +#include "replay/basereplayserializeable.h" +#include "genericpersistentmanager.h" +#include "baserecordingsession.h" +#include "utlstring.h" +#include "compression.h" + +//---------------------------------------------------------------------------------------- + +class KeyValues; +class CBaseReplayContext; +class IReplayContext; + +//---------------------------------------------------------------------------------------- + +class CBaseRecordingSessionBlock : public CBaseReplaySerializeable +{ + typedef CBaseReplaySerializeable BaseClass; + +public: + CBaseRecordingSessionBlock( IReplayContext *pContext ); + + // + // IReplaySerializeable + // + virtual const char *GetSubKeyTitle() const; + virtual const char *GetPath() const; + virtual bool Read( KeyValues *pIn ); + virtual void Write( KeyValues *pOut ); + virtual void OnDelete(); + + enum RemoteStatus_t + { + STATUS_INVALID = -2, + STATUS_ERROR = -1, + STATUS_WRITING, + STATUS_READYFORDOWNLOAD, + + MAX_STATUS + }; + + static const char *GetRemoteStatusStringSafe( RemoteStatus_t nStatus ); + + enum Error_t + { + ERROR_NONE, + ERROR_NOTONDISK, // The replay was lost somehow - eg a server crash before the replay had a chance to write to disk + ERROR_WRITEFAILED, // The disk write somehow failed + }; + + bool ReadHash( KeyValues *pIn, const char *pHashName ); + void WriteHash( KeyValues *pOut, const char *pHashName ) const; + + bool HasValidHash() const; + + // Get a filled out sub key specifically for writing to the session info file + void WriteSessionInfoDataToBuffer( CUtlBuffer &buf ) const; + + RemoteStatus_t m_nRemoteStatus; // This represents the block's status on the server + Error_t m_nHttpError; + int32 m_iReconstruction; // For client-side reconstruction of sessions, this represents the index of the given block + ReplayHandle_t m_hSession; // What session is this partial replay a part of? + uint32 m_uFileSize; // Size in bytes of the binary block file (if compressed, this represents the compressed file size) + uint32 m_uUncompressedSize; // If compressed, this represents the uncompressed file size + char m_szFullFilename[512]; // Filename for the .block file itself. + // NOTE: On the server, full path info is written - on client, only filename is written + CompressorType_t m_nCompressorType; // What type of compressor/decompressor was/should be used, if any? Can be COMPRESSORTYPE_INVALID if not compressed. + uint8 m_aHash[16]; // Server sets this and client compares to validate downloaded block data + bool m_bHashValid; // Do we have a valid hash? + IReplayContext *m_pContext; +}; + +//---------------------------------------------------------------------------------------- + +// +// For serializing blocks - format version implied in header. +// +// In case this format changes, we have some legroom (m_aUnused). +// +struct RecordingSessionBlockSpec_t +{ + int32 m_iReconstruction; + uint8 m_uRemoteStatus; + uint8 m_aHash[16]; + int8 m_nCompressorType; + uint32 m_uFileSize; + uint32 m_uUncompressedSize; + + uint8 m_aUnused[8]; +}; + +#define MIN_SESSION_INFO_PAYLOAD_SIZE sizeof( RecordingSessionBlockSpec_t ) + +//---------------------------------------------------------------------------------------- + +#endif // BASERECORDINGSESSIONBLOCK_H |