# Basic usage
$parser = new \VitalyArt\DemoParser\Parser();
$parser->setDemoFile('/path/to/demo/pub-1609152130-de_dust2_2x2.dem');
$demo = $parser->getDemo();
echo $demo->getDemoProtocol(); // 5
echo $demo->getNetProtocol(); // 48
echo $demo->getMapName(); // de_dust2
echo $demo->getClientName(); // cstrike
echo $demo->getGameDirectory(); // cstrike
echo $demo->getMapCrc(); // 0
$startTime = $demo->getStartTime(); // DateTimeImmutable or null
$endTime = $demo->getEndTime(); // DateTimeImmutable or null
if ($startTime !== null) {
echo $startTime->format('Y-m-d H:i:s');
}
$duration = $demo->getDuration(); // int or false (from LAST_IN_SEGMENT frame time)
if ($duration !== false) {
echo "Duration: {$duration}s"; // e.g. 2891
}
foreach ($demo->getEntries() as $entry) {
$type = $entry->getTypeString(); // EntryTypeEnum::LOADING or PLAYBACK
echo $entry->getDescription();
echo $entry->getFrames();
foreach ($entry->getParsedFrames() as $frame) {
printf("[%s] time=%.3f frame=%d\n",
$frame->getType()->name,
$frame->getTime(),
$frame->getFrame(),
);
}
}
# Error handling
$parser = new \VitalyArt\DemoParser\Parser();
try {
$parser->setDemoFile('/path/to/demo.dem');
$demo = $parser->getDemo();
} catch (\VitalyArt\DemoParser\Exceptions\ParserException $e) {
echo 'Error: ' . $e->getMessage();
}
See the Error Handling page for detailed exception handling.