ddnet/src/game/server/teehistorian.h

102 lines
2.1 KiB
C
Raw Normal View History

#include <engine/console.h>
#include <engine/shared/packer.h>
#include <engine/shared/protocol.h>
#include <game/generated/protocol.h>
#include <time.h>
struct CConfiguration;
class CTuningParams;
class CTeeHistorian
{
public:
typedef void (*WRITE_CALLBACK)(const void *pData, int DataSize, void *pUser);
struct CGameInfo
{
CUuid m_GameUuid;
const char *m_pServerVersion;
time_t m_StartTime;
const char *m_pServerName;
int m_ServerPort;
const char *m_pGameType;
const char *m_pMapName;
int m_MapSize;
int m_MapCrc;
CConfiguration *m_pConfig;
CTuningParams *m_pTuning;
};
CTeeHistorian();
void Reset(const CGameInfo *pGameInfo, WRITE_CALLBACK pfnWriteCallback, void *pUser);
void Finish();
bool Starting() const { return m_State == STATE_START; }
void BeginTick(int Tick);
void BeginPlayers();
void RecordPlayer(int ClientID, const CNetObj_CharacterCore *pChar);
void RecordDeadPlayer(int ClientID);
void EndPlayers();
void BeginInputs();
void RecordPlayerInput(int ClientID, const CNetObj_PlayerInput *pInput);
void RecordPlayerMessage(int ClientID, const void *pMsg, int MsgSize);
void RecordPlayerJoin(int ClientID);
void RecordPlayerDrop(int ClientID, const char *pReason);
void RecordConsoleCommand(int ClientID, int FlagMask, const char *pCmd, IConsole::IResult *pResult);
void EndInputs();
void EndTick();
bool m_Debug;
private:
void WriteHeader(const CGameInfo *pGameInfo);
void UpdateMinMaxClientID(int ClientID);
void WriteTick();
void Write(const void *pData, int DataSize);
enum
{
STATE_START,
STATE_BEFORE_TICK,
STATE_BEFORE_PLAYERS,
STATE_PLAYERS,
STATE_BEFORE_INPUTS,
STATE_INPUTS,
STATE_BEFORE_ENDTICK,
NUM_STATES,
};
struct CPlayer
{
bool m_Alive;
int m_X;
int m_Y;
CNetObj_PlayerInput m_Input;
bool m_InputExists;
};
WRITE_CALLBACK m_pfnWriteCallback;
void *m_pWriteCallbackUserdata;
int m_State;
int m_LastWrittenTick;
bool m_TickWritten;
int m_Tick;
int m_PrevMaxClientID;
int m_MaxClientID;
int m_MinClientID;
CPlayer m_aPrevPlayers[MAX_CLIENTS];
CPacker m_Buffer;
};