/** * Waits message from server * * @param StreamInterface $message * * @return bool * @throws \RuntimeException */ public function waitMessage(StreamInterface $message) { // packet format // <int32> packet length (length itself is not counted) // <byte>[5] ignore // <.....> message $buffer = $this->sock->read(4); $s = new MemStream($buffer); $s->serial_uint32_n($size); $buffer = $this->sock->read($size); $len = strlen($buffer); if ($size != $len) { throw new \RuntimeException("Partial packet received (got {$len}, expected {$size})"); } // discard 5 first bytes // <uint32> 'zeroValue=123' // <byte> TFormat (bitfield) $buffer = substr($buffer, 5); $message->serial(new MemStream($buffer)); }