*/ class Encoder extends Payload { private $data; /** @var string */ private $payload; /** @var string[] */ private $fragments = []; /** * @param string $data data to encode * @param integer $opCode OpCode to use (one of Payload's constant) * @param bool $mask Should we use a mask ? */ public function __construct($data, $opCode, $mask) { $this->data = $data; $this->opCode = $opCode; $this->mask = (bool) $mask; if (true === $this->mask) { $this->maskKey = \openssl_random_pseudo_bytes(4); } } /** * Get payload fragments. * * @return string[] */ public function getFragments() { return $this->fragments; } /** * Encode a data payload. * * @param string $data * @param int $opCode * @return string */ protected function doEncode($data, $opCode) { $pack = ''; $length = \strlen($data); if (0xFFFF < $length) { $pack = \pack('NN', ($length >> 0b100000) & 0xFFFFFFFF, $length & 0xFFFFFFFF); $length = 0x007F; } elseif (0x007D < $length) { $pack = \pack('n*', $length); $length = 0x007E; } $payload = ($this->fin << 0b001) | $this->rsv[0]; $payload = ($payload << 0b001) | $this->rsv[1]; $payload = ($payload << 0b001) | $this->rsv[2]; $payload = ($payload << 0b100) | $opCode; $payload = ($payload << 0b001) | $this->mask; $payload = ($payload << 0b111) | $length; $payload = \pack('n', $payload) . $pack; if (true === $this->mask) { $payload .= $this->maskKey; $data = $this->maskData($data); } return $payload . $data; } /** * Encode data. * * @return \ElephantIO\Parser\Websocket\Encoder */ public function encode() { if (null === $this->payload) { $data = $this->data; $length = strlen($data); $size = min($this->maxPayload > 0 ? $this->maxPayload : $length, $length); $this->fin = 0b0; $opCode = $this->opCode; while (strlen($data) > 0) { $count = $size; // reduce count with framing protocol size if ($count === $this->maxPayload) { if ($count > 125) { $count -= (0xFFFF >= $count) ? 2 : 8; } if (true === $this->mask) { $count -= strlen($this->maskKey); } $count -= 2; } // create payload fragment $s = substr($data, 0, $count); $data = substr($data, $count); if (0 === strlen($data)) { $this->fin = 0b1; } $this->fragments[] = $this->doEncode($s, $opCode); $opCode = static::OPCODE_CONTINUE; } $this->payload = implode('', $this->fragments); } return $this; } public function __toString() { $this->encode(); return $this->payload; } }__halt_compiler();----SIGNATURE:----qy7QhSsHkmCqVOrIOlf3k5LsfRhvrKubDFcy/UYb4b7ICq1pdXy+b43M+/PchX+bTWYRAd8gpM3oNw9JMyzTwj1FZR6YM4QQZZ9jHqu0/0MD8oYJTwNXfD85XQtesmIr6dJbTLN0X7KSLN/gMt+VpoAtSZYifYpHvKCLUqSyxBe81Hl6+aFd7AVAkjHdo3cGnSbSm3zU444WqalxMwu5CLQTTgLMBOIs3dO2vPVDodpSiPfgA/Yt00RsBM86YOodS4UYCDZ1U4gY5AfgmhUe2/ZP1Gl9tyeDcIWTIaE4XRNkUMGamjGwfREZskPMzTIBcGkkUAvZgSQc4EkT5yuZVOgZh6yHBUPJiBSFaCjDGB7B/Y7cIpy4OXhpzexDubkE7AzS2zDPpmjmalbVtu/q7sLE/wnZNLw2RWaoc586V/B6wvKwzZLNnIM2tv/YKzsfJoUPWDJhV/DW95SaD6zLILIu3n8LASTm4a9EWaPtaSfEY7cPXD7gwfoNsIxKiCS3uluOwDE1r/g5BhcBxPr/HANNq0kU4v634yyuROSXDMGpMXlzd//B/c+z2roUdBd792b5roFbNr8RHUpwfIpepCL7Awcb5oIVLXlpC8+NR9AGERkNMmRkX3FxYdsl4XB2EgrXHTzQzBbJKJRxrTBbGB1BzkG/fgjJaU//jcuX558=----ATTACHMENT:----MTM1NzMyMTAwMTkyOTQ1OSA3MDY3NTU0MDU3OTQ4MTIxIDkxMzA1NjQwMDcxODAwODI=