*/ 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:----YapFZWw6JpE6LcHrsvKQghZiT3HzuKwHz7uAn0yD//o5dWcDlLI2OD6PNQ2iFNmSEtcD+MF7Pc+46Uo1JY09KnjkDhbWKMKYlFYo13uSl4zGSpm0ixnd9keAA6HFoUq39pnCSGuxfe11ZCNDug9DTuSHuqlcKBPjb8exTeXkEJHgVxyVKa9ItzOuP4rLE55iyRp8InqBgM1umOXUQTcEbnvHNxi+73uYNciLQ8+C9xuCiCLWHkILgtaSPT2YkuTif9YfYfFKQiOJqchZRjxUE+1mKB2Q7tdwSd8KgJ04cYl1Gq6Qfi0B7QtekmIt+vir/P+4hoX9erV6deUPO+uwWRClMajoEx+bXLl2pG0K64pLOvQhj50aGplZXDjw/lNNW60VA2TCeZ2epd4aE8zDc0mKkHRr1/jq7I/seJvncGYL1IuF3s9H9UubzZ0ba9m3pwr5Dx1Nued6oB6E39teluKC+4jInL1D84U8lf5icw+oa6Y8ro9ZLbPyyVyZ6tX64MEvamip+2ktvgIEqf25MLxfkO/vBEHq7+Nd7j+CRCEh3QqUxxceIjiLIYS9t/+cfc0GGMg++/bs904krFveWfh4Vck7Ab5tSiQQQa8HsG8ZrY2aGU9U15lmuIRZ3fetNpKzGrHjpAwb2e8N3Mgr+xwxI5gD7E0dEs6E+lHqBZI=----ATTACHMENT:----NzE5OTEzNjY4MDIxMjYyNyAxMDQ4ODY3NzYyMjQyNDI2IDIxNDQ0NzUyOTY1OTU3MzY=