Esempio n. 1
0
 def _yield_messages(self, sock):
     try:
         buffer = UnpackableBuffer()
         chunk_loader = self._load_chunks(sock, buffer)
         unpacker = Unpacker(buffer)
         details = []
         while True:
             unpacker.reset()
             details[:] = ()
             chunk_size = -1
             while chunk_size != 0:
                 chunk_size = next(chunk_loader)
             summary_signature = None
             summary_metadata = None
             size, signature = unpacker.unpack_structure_header()
             if size > 1:
                 raise ProtocolError("Expected one field")
             if signature == b"\x71":
                 data = unpacker.unpack()
                 details.append(data)
             else:
                 summary_signature = signature
                 summary_metadata = unpacker.unpack_map()
             yield details, summary_signature, summary_metadata
     except OSError as error:
         self.on_error(error)