109 lines
3.6 KiB
C
109 lines
3.6 KiB
C
|
//========= 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
|