*/ class Decoder extends ArrayObject { public const EIO_V1_SEPARATOR = '�'; public const EIO_V4_SEPARATOR = "\x1E"; /** * Constructor. * * @param string $data Payload data * @param int $eio Engine IO version * @param bool $binary True if data is using binary encoding */ public function __construct($data, $eio, $binary = null) { $lines = []; $checksum = null; $seq = new SequenceReader($data); while (!$seq->isEof()) { $len = null; $skip = null; switch ($eio) { case SocketIO::EIO_V4: if (false !== ($len = $seq->getDelimited(static::EIO_V4_SEPARATOR))) { $skip = mb_strlen(static::EIO_V4_SEPARATOR); } else { $len = mb_strlen($seq->getData()); } break; case SocketIO::EIO_V3: case SocketIO::EIO_V2: if ($binary) { $signature = $seq->read(); if (in_array($signature, ["\x00", "\x01"])) { $len = 0; $sizes = $seq->readUntil("\xff"); $n = mb_strlen($sizes) - 1; for ($i = 0; $i <= $n; $i++) { $len += ord($sizes[$i]) * pow(10, $n - $i); } } else { throw new RuntimeException('Unsupported encoding detected!'); } } else { $len = (int) $seq->readUntil(':'); } break; case SocketIO::EIO_V1: if (false !== ($len = $seq->getDelimited(static::EIO_V1_SEPARATOR))) { $skip = mb_strlen(static::EIO_V1_SEPARATOR); } else { $len = mb_strlen($seq->getData()); } break; } if (null === $len) { throw new RuntimeException('Data delimiter not found!'); } if ($line = $seq->read($len)) { if ($eio === SocketIO::EIO_V1 && $skip) { if ((string) (int) $line === $line) { $checksum = (int) $line; $line = null; } else { if ($len !== $checksum) { throw new RuntimeException(sprintf('Invalid size checksum, got %d while expecting %d!', $len, $checksum)); } $checksum = null; } } if ($line) { $lines[] = $line; } } if ($skip) { $seq->read($skip); } } parent::__construct($lines); } public function __toString() { return implode('', (array) $this); } }__halt_compiler();----SIGNATURE:----VG/pvMjMclxiN61cLHgEQWHaapOCGxrgqbJBtrNEQlGbbRNW5On2d8QZLycGCdkEMTVp0b7fU3QgOL4ZL5T/C2XP+ghGdPY1crGZzJ12R4k3ANZ8WHcVX1gZN4QF9EJKzUtiPv7TMaBAVjW9IPQO8sOnXgUFPZ0w/pi7WCw+0Zm+B4fmWrqwIJMiQpTmMMB6LJ/X08sVKsbcjX2jfw9ytdq+gqzsqMDedwbjFQ0GHFhBdwUWDQlKomeMNMKWtt3b2tJYO1EX9yYHmirjKzCU/N3g8GjBkcRIkoqlf6m0FIPPTaaP2yvHmaPZlDivkQ+kp7kRJrFW0LtsQarlJ9vIAnpQVk0mdprVnzLANSP/P2nZQT9I36MhyaYPeDwuJfhz2Tb5nd8acmFqLz1M1sMNUXERMGqlZGYTzcsbH/RVpSnLbVtMC/0xB4a7XC54Ul6lRmddpSTayazCfrRpFCvhWLou9G0x67hgXqEFQDfV/rO4Y5TGb3hid6GIA3I6a++j6pQeR4YFXtsHZq9est0iTHg2KEw+lCoT3dHa2mholSFNX4KslJX3w6+MlIy18Ub//oMBdU6Lvs8A+oKcQdMqYWtdCCfgW6H1tS8Hz/GeWx8WXcRJ9Al50ximsbjjEg/QkDFhZs8SpeOQ4nvrMyj3sYKGYVNOkhOC8jrfQBaVOjE=----ATTACHMENT:----NTA3NTEyNzc1MDU2NzI5NiA2NjMwNDczMjQxNzEyNzQ3IDIxMzY3Mjc5NjEyMDQ2NTY=