You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
108 lines
3.6 KiB
108 lines
3.6 KiB
//========= 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
|
|
|