Team Fortress 2 Source Code as on 22/4/2020
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.
|
|
//========= 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
|