Ejemplo n.º 1
0
    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)