def _receive(self, packet_buffer={}): packet = PacketBuffer(self._connection.recv(PACKET_SIZE)) packet_type = packet.get_long() if packet_type == PACKET_HEAD: return packet elif packet_type == PACKET_SPLIT: request_id = packet.get_long() # TODO: compressed? if request_id not in packet_buffer: packet_buffer.setdefault(request_id, []) total_packets = packet.get_byte() current_packet_number = packet.get_byte() paket_size = packet.get_short() packet_buffer[request_id].insert(current_packet_number, packet.read()) if current_packet_number == total_packets - 1: full_packet = PacketBuffer(b''.join(packet_buffer[request_id])) if full_packet.get_long() == PACKET_HEAD: return full_packet else: return self._receive(packet_buffer)