protected function decodeMessageSet(string $data): ?array
    {
        if (strlen($data) <= 12) {
            return null;
        }

        $offset      = 0;
        $roffset     = self::unpack(self::BIT_B64, substr($data, $offset, 8));
        $offset     += 8;
        $messageSize = self::unpack(self::BIT_B32, substr($data, $offset, 4));
        $offset     += 4;
        $ret         = $this->decodeMessage(substr($data, $offset), $messageSize);

        if ($ret === null) {
            return null;
        }

        $offset += $ret['length'];

        return [
            'length' => $offset,
            'data'   => [
                'offset'  => $roffset,
                'size'    => $messageSize,
                'message' => $ret['data'],
            ],
        ];
    }
protected function decodeMessageSet(string $data): ?array
    {
        if (strlen($data) <= 12) {
            return null;
        }

        $offset      = 0;
        $roffset     = self::unpack(self::BIT_B64, substr($data, $offset, 8));
        $offset     += 8;
        $messageSize = self::unpack(self::BIT_B32, substr($data, $offset, 4));
        $offset     += 4;
        $ret         = $this->decodeMessage(substr($data, $offset), $messageSize);

        if ($ret === null) {
            return null;
        }

        $offset += $ret['length'];

        return [
            'length' => $offset,
            'data'   => [
                'offset'  => $roffset,
                'size'    => $messageSize,
                'message' => $ret['data'],
            ],
        ];
    }
protected function decodeMessageSet ( string $ data ) : ? array { if ( strlen ( $ data ) <= 12 ) { return null ; } $ offset = 0 ; $ roffset = self :: unpack ( self :: BIT_B64 , substr ( $ data , $ offset , 8 ) ) ; $ offset += 8 ; $ messageSize = self :: unpack ( self :: BIT_B32 , substr ( $ data , $ offset , 4 ) ) ; $ offset += 4 ; $ ret = $ this -> decodeMessage ( substr ( $ data , $ offset ) , $ messageSize ) ; if ( $ ret === null ) { return null ; } $ offset += $ ret [ 'length' ] ; return [ 'length' => $ offset , 'data' => [ 'offset' => $ roffset , 'size' => $ messageSize , 'message' => $ ret [ 'data' ] , ] , ] ; }
decode message set
N.B., MessageSets are not preceded by an int32 like other array elements
in the protocol.

@return mixed[]|null
decode message set N . B . MessageSets are not preceded by an int32 like other array elements in the protocol .