Added packet parsing logic and assertions for frame and tick count
This commit is contained in:
parent
5e43ccfa06
commit
9bb4aa46e8
@ -1,6 +1,7 @@
|
|||||||
|
|
||||||
#include "demofile.h"
|
#include "demofile.h"
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
|
#include <memory>
|
||||||
|
|
||||||
int main(const int argc, const char* argv[])
|
int main(const int argc, const char* argv[])
|
||||||
{
|
{
|
||||||
@ -19,9 +20,38 @@ int main(const int argc, const char* argv[])
|
|||||||
|
|
||||||
unsigned char cmd;
|
unsigned char cmd;
|
||||||
int32 tick;
|
int32 tick;
|
||||||
|
int32 sequenceInfo1;
|
||||||
|
int32 sequenceInfo2;
|
||||||
|
democmdinfo_t cmdInfo;
|
||||||
|
std::string packetBuf;
|
||||||
demoFile.ReadCmdHeader(cmd, tick);
|
demoFile.ReadCmdHeader(cmd, tick);
|
||||||
|
|
||||||
assert(cmd == dem_synctick && tick == 0);
|
assert(cmd == dem_synctick && tick == 0);
|
||||||
|
|
||||||
|
const int numFrames = demoHeader->playback_frames;
|
||||||
|
const int numTicks = demoHeader->playback_ticks;
|
||||||
|
for (int i = 0; i <= numFrames; ++i)
|
||||||
|
{
|
||||||
|
demoFile.ReadCmdHeader(cmd, tick);
|
||||||
|
printf("tick: %i\n", tick);
|
||||||
|
switch (cmd)
|
||||||
|
{
|
||||||
|
case dem_packet:
|
||||||
|
demoFile.ReadCmdInfo(cmdInfo);
|
||||||
|
demoFile.ReadSequenceInfo(sequenceInfo1, sequenceInfo2);
|
||||||
|
demoFile.ReadRawData(packetBuf);
|
||||||
|
break;
|
||||||
|
case dem_stop:
|
||||||
|
assert(i == numFrames && tick == numTicks);
|
||||||
|
break;
|
||||||
|
case dem_synctick:
|
||||||
|
case dem_consolecmd:
|
||||||
|
case dem_usercmd:
|
||||||
|
case dem_datatables:
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
demoFile.Close();
|
demoFile.Close();
|
||||||
|
|
||||||
|
@ -124,6 +124,32 @@ int32 CDemoFile::ReadRawData( char *buffer, int32 length )
|
|||||||
return size;
|
return size;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool CDemoFile::ReadRawData(std::string& buf)
|
||||||
|
{
|
||||||
|
if (!m_fileBuffer.size())
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// read length of data block
|
||||||
|
int32 size = *(int32 *)(&m_fileBuffer[m_fileBufferPos]);
|
||||||
|
m_fileBufferPos += sizeof(int32);
|
||||||
|
|
||||||
|
if (size < 0)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "CDemoFile::ReadRawData: invalid size (%i).\n", size);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
buf.resize(size);
|
||||||
|
|
||||||
|
// read data into buffer
|
||||||
|
memcpy(&buf[0], &m_fileBuffer[m_fileBufferPos], size);
|
||||||
|
m_fileBufferPos += size;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
bool CDemoFile::Open( const char *name )
|
bool CDemoFile::Open( const char *name )
|
||||||
{
|
{
|
||||||
Close();
|
Close();
|
||||||
|
@ -229,6 +229,8 @@ public:
|
|||||||
|
|
||||||
int32 ReadRawData( char *buffer, int32 length );
|
int32 ReadRawData( char *buffer, int32 length );
|
||||||
|
|
||||||
|
bool ReadRawData(std::string& buf);
|
||||||
|
|
||||||
void ReadSequenceInfo( int32 &nSeqNrIn, int32 &nSeqNrOutAck );
|
void ReadSequenceInfo( int32 &nSeqNrIn, int32 &nSeqNrOutAck );
|
||||||
|
|
||||||
void ReadCmdInfo( democmdinfo_t& info );
|
void ReadCmdInfo( democmdinfo_t& info );
|
||||||
|
Loading…
Reference in New Issue
Block a user