DDNet documentation
Loading...
Searching...
No Matches
ghost.h
Go to the documentation of this file.
1#ifndef ENGINE_CLIENT_GHOST_H
2#define ENGINE_CLIENT_GHOST_H
3
4#include <engine/ghost.h>
5
6#include <cstdint>
7#include <optional>
8
9enum
10{
14};
15static_assert(MAX_CHUNK_SIZE % sizeof(uint32_t) == 0, "Chunk size must be aligned with uint32_t");
16
17// version 4-6
19{
20 unsigned char m_aMarker[8];
21 unsigned char m_Version;
23 char m_aMap[64];
24 unsigned char m_aZeroes[sizeof(int32_t)]; // Crc before version 6
25 unsigned char m_aNumTicks[sizeof(int32_t)];
26 unsigned char m_aTime[sizeof(int32_t)];
28
29 int GetTicks() const;
30 int GetTime() const;
31 CGhostInfo ToGhostInfo() const;
32};
33
35{
36public:
37 alignas(uint32_t) unsigned char m_aData[MAX_ITEM_SIZE];
38 size_t m_Size;
39 int m_Type;
40};
41
43{
47
48 alignas(uint32_t) char m_aBuffer[MAX_CHUNK_SIZE];
49 alignas(uint32_t) char m_aBufferTemp[MAX_CHUNK_SIZE];
51 const char *m_pBufferEnd;
53 std::optional<CGhostItem> m_LastItem;
54
55 void ResetBuffer();
56 void FlushChunk();
57
58public:
60
61 void Init();
62
63 int Start(const char *pFilename, const char *pMap, const SHA256_DIGEST &MapSha256, const char *pName) override;
64 void Stop(int Ticks, int Time) override;
65
66 void WriteData(int Type, const void *pData, size_t Size) override;
67 bool IsRecording() const override { return m_File != nullptr; }
68};
69
71{
75
78
79 alignas(uint32_t) char m_aBuffer[MAX_CHUNK_SIZE];
80 alignas(uint32_t) char m_aBufferTemp[MAX_CHUNK_SIZE];
82 const char *m_pBufferEnd;
86 std::optional<CGhostItem> m_LastItem;
87
88 void ResetBuffer();
89 IOHANDLE ReadHeader(CGhostHeader &Header, const char *pFilename, const char *pMap, const SHA256_DIGEST &MapSha256, unsigned MapCrc, bool LogMapMismatch) const;
90 bool ValidateHeader(const CGhostHeader &Header, const char *pFilename) const;
91 bool CheckHeaderMap(const CGhostHeader &Header, const char *pFilename, const char *pMap, const SHA256_DIGEST &MapSha256, unsigned MapCrc, bool LogMapMismatch) const;
92 bool ReadChunk(int *pType);
93
94public:
96
97 void Init();
98
99 bool Load(const char *pFilename, const char *pMap, const SHA256_DIGEST &MapSha256, unsigned MapCrc) override;
100 void Close() override;
101 const CGhostInfo *GetInfo() const override { return &m_Info; }
102
103 bool ReadNextType(int *pType) override;
104 bool ReadData(int Type, void *pData, size_t Size) override;
105
106 bool GetGhostInfo(const char *pFilename, CGhostInfo *pGhostInfo, const char *pMap, const SHA256_DIGEST &MapSha256, unsigned MapCrc) override;
107};
108#endif
Definition ghost.h:11
Definition ghost.h:35
int m_Type
Definition ghost.h:39
unsigned char m_aData[MAX_ITEM_SIZE]
Definition ghost.h:37
size_t m_Size
Definition ghost.h:38
bool ReadData(int Type, void *pData, size_t Size) override
Definition ghost.cpp:466
const char * m_pBufferEnd
Definition ghost.h:82
CGhostLoader()
Definition ghost.cpp:215
const CGhostInfo * GetInfo() const override
Definition ghost.h:101
CGhostInfo m_Info
Definition ghost.h:77
class IStorage * m_pStorage
Definition ghost.h:74
bool CheckHeaderMap(const CGhostHeader &Header, const char *pFilename, const char *pMap, const SHA256_DIGEST &MapSha256, unsigned MapCrc, bool LogMapMismatch) const
Definition ghost.cpp:321
int m_BufferCurItem
Definition ghost.h:84
bool GetGhostInfo(const char *pFilename, CGhostInfo *pGhostInfo, const char *pMap, const SHA256_DIGEST &MapSha256, unsigned MapCrc) override
Definition ghost.cpp:512
void Close() override
Definition ghost.cpp:500
char * m_pBufferPos
Definition ghost.h:81
void ResetBuffer()
Definition ghost.cpp:227
std::optional< CGhostItem > m_LastItem
Definition ghost.h:86
int m_BufferPrevItem
Definition ghost.h:85
bool ReadNextType(int *pType) override
Definition ghost.cpp:436
bool ValidateHeader(const CGhostHeader &Header, const char *pFilename) const
Definition ghost.cpp:278
void Init()
Definition ghost.cpp:222
bool ReadChunk(int *pType)
Definition ghost.cpp:383
IOHANDLE m_File
Definition ghost.h:72
char m_aFilename[IO_MAX_PATH_LENGTH]
Definition ghost.h:73
int m_BufferNumItems
Definition ghost.h:83
IOHANDLE ReadHeader(CGhostHeader &Header, const char *pFilename, const char *pMap, const SHA256_DIGEST &MapSha256, unsigned MapCrc, bool LogMapMismatch) const
Definition ghost.cpp:236
CGhostHeader m_Header
Definition ghost.h:76
char m_aBuffer[MAX_CHUNK_SIZE]
Definition ghost.h:79
bool Load(const char *pFilename, const char *pMap, const SHA256_DIGEST &MapSha256, unsigned MapCrc) override
Definition ghost.cpp:363
char m_aBufferTemp[MAX_CHUNK_SIZE]
Definition ghost.h:80
void WriteData(int Type, const void *pData, size_t Size) override
Definition ghost.cpp:100
std::optional< CGhostItem > m_LastItem
Definition ghost.h:53
IOHANDLE m_File
Definition ghost.h:44
void FlushChunk()
Definition ghost.cpp:135
int m_BufferNumItems
Definition ghost.h:52
void Init()
Definition ghost.cpp:47
CGhostRecorder()
Definition ghost.cpp:40
void ResetBuffer()
Definition ghost.cpp:81
class IStorage * m_pStorage
Definition ghost.h:46
bool IsRecording() const override
Definition ghost.h:67
const char * m_pBufferEnd
Definition ghost.h:51
char * m_pBufferPos
Definition ghost.h:50
char m_aFilename[IO_MAX_PATH_LENGTH]
Definition ghost.h:45
void Stop(int Ticks, int Time) override
Definition ghost.cpp:178
char m_aBuffer[MAX_CHUNK_SIZE]
Definition ghost.h:48
char m_aBufferTemp[MAX_CHUNK_SIZE]
Definition ghost.h:49
int Start(const char *pFilename, const char *pMap, const SHA256_DIGEST &MapSha256, const char *pName) override
Definition ghost.cpp:52
Definition ghost.h:31
Definition ghost.h:20
Definition storage.h:21
@ NUM_ITEMS_PER_CHUNK
Definition ghost.h:12
@ MAX_ITEM_SIZE
Definition ghost.h:11
@ MAX_CHUNK_SIZE
Definition ghost.h:13
@ MAX_NAME_LENGTH
Definition protocol.h:99
constexpr auto IO_MAX_PATH_LENGTH
Definition types.h:26
void * IOHANDLE
Definition logger.h:12
Definition ghost.h:19
unsigned char m_Version
Definition ghost.h:21
SHA256_DIGEST m_MapSha256
Definition ghost.h:27
unsigned char m_aZeroes[sizeof(int32_t)]
Definition ghost.h:24
int GetTicks() const
Definition ghost.cpp:20
char m_aMap[64]
Definition ghost.h:23
char m_aOwner[MAX_NAME_LENGTH]
Definition ghost.h:22
int GetTime() const
Definition ghost.cpp:25
unsigned char m_aNumTicks[sizeof(int32_t)]
Definition ghost.h:25
CGhostInfo ToGhostInfo() const
Definition ghost.cpp:30
unsigned char m_aMarker[8]
Definition ghost.h:20
unsigned char m_aTime[sizeof(int32_t)]
Definition ghost.h:26
Definition hash.h:15