source-engine/replay/cl_recordingsessionblock.h

80 lines
2.6 KiB
C
Raw Permalink Normal View History

2020-04-22 16:56:21 +00:00
//========= Copyright Valve Corporation, All rights reserved. ============//
//
//=======================================================================================//
#ifndef CL_RECORDINGSESSIONBLOCK_H
#define CL_RECORDINGSESSIONBLOCK_H
#ifdef _WIN32
#pragma once
#endif
//----------------------------------------------------------------------------------------
#include "baserecordingsessionblock.h"
#include "engine/http.h"
//----------------------------------------------------------------------------------------
class CClientRecordingSessionBlock : public CBaseRecordingSessionBlock
{
typedef CBaseRecordingSessionBlock BaseClass;
public:
CClientRecordingSessionBlock( IReplayContext *pContext );
bool NeedsUpdate() const;
bool ShouldDownloadNow() const;
bool DownloadedSuccessfully() const;
int GetNumDownloadAttempts() const { return m_nDownloadAttempts; }
virtual bool Read( KeyValues *pIn );
virtual void Write( KeyValues *pOut );
virtual void OnDelete();
// Resets the download status to be "ready for download" if the # of download attempts
// is under 3. Returns false if reset failed, otherwise true.
bool AttemptToResetForDownload();
// Checks data against the block's md5 digest
bool ValidateData( const void *pData, int nSize, unsigned char *pOutHash = NULL ) const;
enum DownloadStatus_t
{
DOWNLOADSTATUS_ABORTED, // Download was aborted for some reason
DOWNLOADSTATUS_ERROR, // Refer to m_nError for more detail
DOWNLOADSTATUS_WAITING, // Waiting for the file to be ready on the server
DOWNLOADSTATUS_READYTODOWNLOAD, // File is ready to be downloaded
DOWNLOADSTATUS_CONNECTING, // Connecting to file server
DOWNLOADSTATUS_DOWNLOADING, // Currently downloading
DOWNLOADSTATUS_DOWNLOADED, // Successfully downloaded file
MAX_DOWNLOADSTATUS
};
// Persistent:
DownloadStatus_t m_nDownloadStatus;
uint32 m_uBytesDownloaded;
bool m_bDataInvalid; // Hash didn't match data?
HTTPError_t m_nHttpError;
private:
// Non-persistent:
int m_nDownloadAttempts; // Should be modified via AttemptToResetForDownload()
};
//----------------------------------------------------------------------------------------
inline CClientRecordingSessionBlock *CL_CastBlock( IReplaySerializeable *pBlock )
{
return static_cast< CClientRecordingSessionBlock * >( pBlock );
}
inline const CClientRecordingSessionBlock *CL_CastBlock( const IReplaySerializeable *pBlock )
{
return static_cast< const CClientRecordingSessionBlock * >( pBlock );
}
//----------------------------------------------------------------------------------------
#endif // CL_RECORDINGSESSIONBLOCK_H