Exemplo n.º 1
0
 protected function readHeader(MemStream $s)
 {
     // check header
     $s->serial_buffer($hskp, 4);
     if ($hskp !== self::HEADER) {
         throw new \RuntimeException('Wrong packed sheets header, expected "' . self::HEADER . '"');
     }
     $s->serial_uint32($header_version);
     if ($header_version != self::HEADER_VERSION) {
         throw new \RuntimeException('Wrong packed sheets version, expected "' . self::HEADER_VERSION . '", got "' . $header_version . '"');
     }
     $s->serial_byte($this->compat);
     $s->serial_uint32($dependBlockSize);
     if ($this->skipDependBlock) {
         // skip dependency block
         $pos = $s->getPos();
         $s->seek($pos + $dependBlockSize);
     } else {
         // read dictionary
         $s->serial_uint32($nb);
         $s->serial_int_string($this->dictionnary, $nb);
         // read dependency data
         $this->dependencies = array();
         $s->serial_uint32($depSize);
         for ($i = 0; $i < $depSize; $i++) {
             $s->serial_uint32($sheetId);
             $s->serial_uint32($nb);
             $s->serial_uint32($this->dependencies[$sheetId], $nb);
         }
     }
 }
Exemplo n.º 2
0
 /**
  * {@inheritdoc}
  */
 public function serial(MemStream $s)
 {
     // string with <uint32> length counter
     $s->serial_string($this->name);
     if ($s->isReading()) {
         // read all remaining bytes from buffer
         $length = $s->getSize() - $s->getPos();
     } else {
         $length = strlen($this->payload);
     }
     $s->serial_buffer($this->payload, $length);
 }
Exemplo n.º 3
0
 /**
  * Send message
  *
  * @param StreamInterface $message
  */
 public function sendMessage(StreamInterface $message)
 {
     // TFormat from <nel/message.h>
     $messageType = 0;
     // build packet
     // <int32> packet length (length itself is not counted)
     // <int32> packet number
     // <byte>  message type
     // <.....> message
     // first pass - to get packet length
     $hd = new MemStream();
     $hd->serial_uint32($this->msgNum);
     $hd->serial_byte($messageType);
     // include original message
     $message->serial($hd);
     $this->msgNum++;
     $buf = $hd->getBuffer();
     $len = strlen($buf);
     // second pass - final packet
     $hd = new MemStream();
     $hd->serial_uint32_n($len);
     $hd->serial_buffer($buf);
     $this->sock->write($hd->getBuffer());
 }