#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import socket
import struct
import time

IP_ADDRESS = "192.168.1.2"
FILENAME_EXTENSION = '.alac'

sock = socket.socket()
sock.connect((IP_ADDRESS, 9090))

encoded_filename_extension = FILENAME_EXTENSION.encode("UTF-8")  # Кодирование расширения файла
length_of_encoded_filename_extension = len(encoded_filename_extension)  # Получение длины расширения файла в байтах
struct_leng_of_encoded_filename_extension = struct.pack('H', length_of_encoded_filename_extension)  # Запаковка длины расширения файла
sock.send(struct_leng_of_encoded_filename_extension)  # Посылка длины расширения файла

if sock.recv(2).decode("UTF-8") == "OK":  # Ожидание получение OK
    sock.send(struct.pack('{}s'.format(length_of_encoded_filename_extension),
                          encoded_filename_extension))  # Посылает запакованную строку - расширение файла
    if sock.recv(2).decode("UTF-8") == "OK":
        pass

quantity_of_files = struct.unpack('Q', sock.recv(8))[0]  # Распаковывает количество файлов

for i in range(quantity_of_files):  # Итерации по количеству файлов

    file_size = struct.unpack('Q', sock.recv(8))[0]  # Получает и распаковывает размер файла
    sock.send('OK'.encode('UTF-8'))  # Посылает OK

    file_name_size = struct.unpack('H', sock.recv(2))[0]  # Получает и распаковывает длину имени
    sock.send('OK'.encode('UTF-8'))  # Посылает OK

    file_name = struct.unpack('{}s'.format(file_name_size),
                              sock.recv(file_name_size))[0].decode("UTF-8")  # Получает и распаковывает имя файла
    sock.send('OK'.encode('UTF-8'))  # Посылает OK

    open_file = open(file_name, 'wb')  # Открывает файл, и записывает туда все данные, получаемые из сокета

    for i in range(file_size//16384):
        open_file.write(sock.recv(16384))
        time.sleep(0.0000000000000000000000000001)

    open_file.write(sock.recv(file_size%16384))
    open_file.close()
    sock.send('OK'.encode('UTF-8'))

    print(file_name, 'written')

sock.close()
input("Press Enter to exit")




