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

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

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

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

Получение рукопожатия расширений

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

На этом этапе вы добавите поддержку получения ответного сообщения рукопожатия расширений.

Рукопожатие расширений: часть 2

На предыдущем этапе ваш клиент отправлял другому пиру сообщение рукопожатия расширений. Теперь вы добавите получение ответного сообщения от пира.

Его структура будет такой же, как у сообщения, отправленного на предыдущем этапе. Словарь полезной нагрузки содержит следующие ключи: {"m": {"ut_metadata": <PEER'S ID>}}.

Программа должна сохранить идентификатор расширения ut_metadata и вывести его. На следующих этапах он понадобится для отправки сообщений расширения ut_metadata.

Напомним общую последовательность действий:

  • Установить TCP-соединение с пиром.
  • Отправить сообщение базового рукопожатия.
  • Получить сообщение базового рукопожатия.
  • Отправить сообщение битового поля (в этом задании можно пропустить).
  • Получить сообщение битового поля.
  • Если пир поддерживает расширения (судя по зарезервированному биту базового рукопожатия):
    • Отправить сообщение рукопожатия расширений (предыдущий этап).
    • Получить сообщение рукопожатия расширений (этот этап).

Тесты

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

$ ./your_program.sh magnet_handshake <magnet-link>

Ожидаемый вывод:

Peer ID: 0102030405060708090a0b0c0d0e0f1011121314
Peer Metadata Extension ID: 123

Значение Peer Metadata Extension ID генерируется случайно; его нужно извлечь из словаря сообщения рукопожатия расширений.

Примечания

  • Для локальной проверки можно использовать эти magnet-ссылки. Возможно, потребуется заключить ссылки в двойные кавычки, чтобы экранировать специальные символы в терминале.
  • Идентификаторы расширений нужно хранить отдельно для каждого пира: разные пиры могут использовать разные идентификаторы одного расширения.

Проверка в вашей 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 jk6

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

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

go / ЛОКАЛЬНО

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

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

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

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