Проектная лаборатория

Собственный BitTorrent

0 / 19этапов пройдено

Этап 18 · Magnet-ссылки

Скачивание фрагмента

Русский перевод заданий CodeCrafters. Примеры подготовлены для Go. Выбор языка меняет команды и результаты, но не текст задания.

На этом этапе вы скачаете один фрагмент по magnet-ссылке и сохраните его на диск.

Команда magnet_download_piece

Для проверки программы на этом этапе вводится новая команда magnet_download_piece. Она работает так:

$ ./your_program.sh magnet_download_piece -o /tmp/test-piece-0 <magnet-link> 0

Она похожа на ранее реализованную команду download_piece, но принимает magnet-ссылку вместо пути к файлу .torrent.

Для этой команды нужно реализовать следующую последовательность:

  • Разобрать magnet-ссылку и получить URL трекера.
  • Выполнить GET-запрос трекеру и получить список пиров.
  • Установить TCP-соединение с пиром и выполнить базовое рукопожатие.
  • Выполнить рукопожатие расширений.
  • Получить словарь info через расширение метаданных (отправить сообщение request, получить data).
  • Скачать блоки фрагмента (как в команде download_piece из предыдущих этапов).
  • Сохранить фрагмент на диск.

Тесты

Тестирующая система запустит вашу программу следующим образом:

$ ./your_program.sh magnet_download_piece -o /tmp/test-piece-0 <magnet_link> 0

Она проверит, что фрагмент скачан правильно.

Примечания

Проверка в вашей IDE

Нужны Node.js, Git, Go 1.24+ для тестеров и инструменты выбранного языка. Тестеры загружаются и запускаются локально; отдельным проектам нужны дополнительные системные зависимости.

Настройка проекта и IDE

1. Создайте проект один раз

node '/opt/graphlms/tools/project-lab/cli.mjs' init bittorrent ./my-bittorrent --language go

2. Откройте папку в IDE

cd ./my-bittorrent

Реализуйте требования этапа в созданном проекте.

Запустите из папки проекта

node '/opt/graphlms/tools/project-lab/cli.mjs' submit --stage qv6

Запускайте submit из папки проекта. Это локальные проверки, а не сертификаты или результаты аккаунта CodeCrafters.

Результат проверки

go / ЛОКАЛЬНО

Подключение к локальной проверке…

Здесь появится результат

Запустите submit в терминале. Страница обновляет результаты каждые 8 секунд.

GraphLMS — инженерная лаборатория роста