demboyz/demboyz/demboyz.cpp

91 lines
2.2 KiB
C++
Raw Normal View History

2014-10-29 05:20:24 +01:00
#include "demofile.h"
2015-04-30 22:03:22 +02:00
#include "demofilebitbuf.h"
#include "netmessages.h"
2014-10-29 06:15:40 +01:00
#include <assert.h>
#include <vector>
2015-04-30 22:03:22 +02:00
void ParsePacket(const std::vector<unsigned char>& packet)
2015-04-30 22:03:22 +02:00
{
assert(packet.size() <= NET_MAX_PAYLOAD);
2015-05-04 04:40:41 +02:00
CBitRead bitbuf(packet.data(), packet.size());
while (bitbuf.GetNumBitsLeft() >= NETMSG_TYPE_BITS)
2015-04-30 22:03:22 +02:00
{
2015-05-04 04:40:41 +02:00
uint32 typeId = bitbuf.ReadUBitLong(NETMSG_TYPE_BITS);
printf("%i\n", typeId);
2015-05-04 04:40:41 +02:00
ProcessNetMsg(typeId, bitbuf);
2015-04-30 22:03:22 +02:00
}
}
2014-10-29 05:20:24 +01:00
2015-05-04 04:40:41 +02:00
void ParseDemoSequence(const std::vector<unsigned char>& sequenceData)
{
2015-05-04 04:40:41 +02:00
unsigned char cmd;
int32 tick;
int32 sequenceInfo1;
int32 sequenceInfo2;
democmdinfo_t cmdInfo;
std::vector<unsigned char> buffer;
2015-05-04 04:40:41 +02:00
DemoSequenceReader reader(sequenceData);
for (;;)
{
reader.ReadCmdHeader(cmd, tick);
switch (cmd)
{
case dem_signon:
case dem_packet:
reader.ReadCmdInfo(cmdInfo);
reader.ReadSequenceInfo(sequenceInfo1, sequenceInfo2);
assert(sequenceInfo1 == sequenceInfo2);
reader.ReadRawData(buffer);
ParsePacket(buffer);
break;
case dem_synctick:
// nothing
break;
case dem_consolecmd:
reader.ReadRawData(nullptr, 1024);
2015-05-04 04:40:41 +02:00
break;
case dem_usercmd:
reader.ReadUserCmd(buffer, 256);
2015-05-04 04:40:41 +02:00
break;
case dem_datatables:
// TODO: datatables
reader.ReadRawData(nullptr, 64*1024);
2015-05-04 04:40:41 +02:00
break;
case dem_stop:
// TODO assert frame and tick numbers
break;
case dem_customdata:
reader.ReadRawData(nullptr, 0);
break;
case dem_stringtables:
reader.ReadRawData(nullptr, 0);
2015-05-04 04:40:41 +02:00
break;
default:
assert(false);
break;
}
}
}
2014-10-29 05:20:24 +01:00
int main(const int argc, const char* argv[])
{
if (argc < 2)
2014-10-29 05:20:24 +01:00
{
return -1;
}
CDemoFile demoFile;
2015-05-04 02:28:53 +02:00
if (!demoFile.Open(argv[1]))
2014-10-29 05:20:24 +01:00
{
return -1;
}
2014-10-29 06:15:40 +01:00
auto demoHeader = demoFile.GetDemoHeader();
2015-05-04 04:40:41 +02:00
ParseDemoSequence(demoFile.GetSignOnData());
ParseDemoSequence(demoFile.GetDemoData());
2014-10-29 05:20:24 +01:00
demoFile.Close();
return 0;
}