summaryrefslogtreecommitdiff
path: root/replay/baserecordingsessionblock.h
diff options
context:
space:
mode:
Diffstat (limited to 'replay/baserecordingsessionblock.h')
-rw-r--r--replay/baserecordingsessionblock.h108
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