80 lines
2.6 KiB
C++
80 lines
2.6 KiB
C++
//========= 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
|