/** * Parses a event stream by using the given serializer, the event mapping and a header node * * @param Serializer $serializer the data serializer * @param $mapping array the mapping * @param Node $headerNode the header node * @return \Generator a generator that will yield a result on every event */ private function parseEventStream(Serializer $serializer, $mapping, Node $headerNode) { $gametime = 0; while (!$serializer->eof()) { /** @var EventHeader $header */ $header = $serializer->parse($headerNode); $gametime = $gametime + $header->getTimestamp(); if (!isset($mapping[$header->getEventID()])) { print_r($header); throw new \RuntimeException(sprintf("Event %s not found.", $header->getEventID())); } /** @var Node $node */ $node = $mapping[$header->getEventID()]; $event = $serializer->parse($node); $serializer->align(); if ($event instanceof AbstractEvent) { $event->setHeader($header); } (yield $gametime => $event); } }
public function testUnserializeUInt32() { $result = $this->serializer->unserialize($this->createMemoryParser(hex2bin("07" . "BEEF0000"))); $this->assertEquals(0xefbe, $result); }