Клиентик. Живет дома, раз в N минут ломится на сервак, в сокет. Посредством json-протокольчика они с сервером обемниваются данными — авторизация и каталог доступного для скачивания. Клиент определяет, что ему нужно скачать. Смотрит на размеры файлов, делает разбиение на потоки. У клиента есть несколько ограничителей:
— количество потоков на скачивание лимитировано
— в конфиге настраиваются так называемые caps — ограничения по дням недели и/или времени суток. Штоп оно не жрало весь наш дохленький канальчик, пока мы с женой всякие вконтактики вечером читаем.
— каждый поток скачивает не более N байт от файла.
То есть, например, если файл — 25 гиг, клиент разбивает задачу на 75 частей по 330 мб (условно) и начинает это дело сосать. Итак, после всех ограничений, клиентик определил что ему качать, можно ли качать (не забит ли пул тредов) и каким образом ему качать (медленно и печально или стремительно и борзо). После этого, он опять общается с сервером, запрашивает разрешение. Сервер выдает ключики, клиент открывает коннекты на другой порт и начинает сливать доброе добро в несколько горл. Тредики пишут в один файл асинхронно, ведется учет меток и позиций. Есть обслуживание обрывов связи, зависания рутера, отказа канала. Есть принудительное понижение "жадности", если отклик хуевый. Есть возвраты и перекачивание частей, если вдруг учет лажанул.
По окончании скачивания, берутся баннер/постер, nfo, всё это дело правильно именуется и укладывается, и в финале дергается ненаглядный попкорн, штоп он проапдейтил свою базку, на предмет новой фильмы.
Чего хотелось достичь. Во-первых, минимизировать моё человеческое участие во всём процессе. Этого я достиг полностью. Если начальный торрент называется хоть как-то более-менее правильно, то практически наверняка всё случится само собой. За это спасибо imdb-шному поиску — релевантность выдачи крайне на высоте.
Во-вторых, постеры-баннеры. NMJ встроенный в попкорн в этом плане хромает на все 4 лапы, сука. Самостоятельно постоянно промахивается и не находит картинок. А смотреть на правильные обложки/задники гораздо приятнее, чем на умолчательные картинки.
В-третьих, непрерывность процесса. Я постоянно забывал перебрасывать скачанные фильмы, апдейтить попкорн. И плюс ко всему, ставишь на закачку из дома — рутер повис или канал ебнулся и все встало раком. Раздражало пиздец. Это тоже победил.
В-четвертых, хотелось сделать клиентик "одним куском" без ебнутых зависимостей, без базы данных, без развесистых настроек. Этого достиг. Один jar, с одним конфигом из 10 строк. Можно отдавать друзьям, можно качать с другого места и т.д. Переносимость, мультиплатформенность, етц :) Java rulez.
И последнее. Ставишь сливаться большой файл. Жена детей накормила, спать уложила, села в чятиках болтать, а канал засран шопестец, она начинает ныть, мол "интернетов нету". И так каждый день. Очень хотелось сделать нормальный шедулинг. Тоже сделано.
Итого, я отличный молодец, все поставленные цели успешно отпобедил.