def decode_packet(buf, offset): """ Decodes a packet payload :param buf: The source buffer :type buf: bytes :param offset: Buffer offset :type offset: int :return: 2-tuple (new offset, (packet_id, packet_payload)) :rtype tuple """ #print(buf, offset) offset, length = DataTypes.read_varint(buf, offset) #print(length) payload = buf[offset:offset + length] #if len(payload) < 16: # print(payload) offset += length payload_offset, packet_id = DataTypes.read_varint(payload, 0) data = payload[payload_offset:] return offset, (packet_id, data)
def _receive_packet(self): # TODO: clean up, the issue here is because we don't receive the full frame first length = -1 offset = 0 data = b"" # while length == 0: # data += self._sock.recv(1024) # offset, length = DataTypes.read_varint(data, 0) while True: if (len(data) < length - offset) or length == -1: data += self._sock.recv(1024) else: break if length == -1: offset, length = DataTypes.read_varint(data, 0) print(length) return data