public function analyzeHeaders(string $rawMQTTHeaders, ClientInterface $client): ReadableContentInterface
    {
        if ($rawMQTTHeaders === '') {
            $this->logger->debug('Empty headers, returning an empty object');
            return new EmptyReadableResponse($this->logger);
        }
        $controlPacketType = \ord($rawMQTTHeaders[0]) >> 4;

        if (isset(self::$readableObjects[$controlPacketType])) {
            $this->currentObjectType = self::$readableObjects[$controlPacketType];
            $this->logger->info('Found a matching object, instantiating', [
                'type' => $this->currentObjectType,
                'controlPacketNumber' => $controlPacketType,
            ]);
            /** @var ReadableContentInterface $readableContent */
            $readableContent = new $this->currentObjectType($this->logger);
            $readableContent->instantiateObject($rawMQTTHeaders, $client);
        } else {
            $this->logger->error('Invalid control packet type found', ['controlPacketType' => $controlPacketType]);
            throw new \DomainException(sprintf('Invalid control packet found (%d)', $controlPacketType));
        }

        return $readableContent;
    }