Перейти к основному содержимому

Словарь

Термины, которые уже встречаются в документации. У каждого - краткое значение и ссылка на страницу, где он разобран подробно.

  • версия протокола - число, которое клиент присылает в рукопожатии (например, 772). Задаёт, какая раскладка полей пакетов и какие номера пакетов действуют для сессии. Подробнее - «Из сырого пакета».

  • гейт отправки - SemaphoreSlim(1, 1) внутри MinecraftClient, через который проходит каждый SendAsync и SendRawAsync. Кадры разных вызовов не перемешиваются на одном сокете. Подробнее - «Поток пакетов».

  • кадр - служебная обвязка вокруг пакета: длина, при сжатии - ещё один varint, затем тело. Делает видимой границу между пакетами в непрерывном потоке TCP. Подробнее - «Кадры».

  • каталог - список пакетов одной пары (фаза, направление), который отдаёт PacketRegistry.Catalog(phase, dir). Подробнее - «Фаза и направление».

  • чтение пачками - путь транспорта, на котором кадры читаются и пишутся пачками, а не по одному: StreamingConnection поверх общего буфера. Подробнее - «Соединение без клиента».

  • мультиверсия - способность одной сборки работать со всеми поддержанными версиями протокола: раскладки полей и номера пакетов хранятся внутри самого пакета, нужную выбирает номер протокола. Подробнее - «Одна сборка - много версий».

  • направление - PacketDirection: Clientbound для пакетов от сервера клиенту, Serverbound - в обратную сторону. У каждой фазы свой набор пакетов на каждое направление. Подробнее - «Фаза и направление».

  • номер пакета - поле Id у IncomingPacket, число на проводе. Само по себе ничего не значит: тип пакета ищется по номеру вместе с фазой, направлением и версией протокола. Подробнее - «Из сырого пакета».

  • обработчик - ClientboundHandler и ServerboundHandler: базовый класс с методом On<Имя> на каждый пакет. Код приложения наследуется и переопределяет только нужное. Подробнее - «Первый бот».

  • общий секрет - 16 байт, которыми стороны обмениваются через EncryptionRequestPacket и EncryptionResponsePacket. Служит и ключом AES-128, и вектором инициализации шифра. Подробнее - «Сжатие и шифрование».

  • окно в буфер - тело пакета не копия байт, а участок памяти арендованного буфера. Живёт только до следующего чтения, поэтому разбирать его нужно сразу, не тащить через await. Подробнее - «Поток пакетов».

  • ordinal - плотный номер пакета внутри своего каталога, часть PacketIdentity. В отличие от номера пакета на проводе, ordinal стабилен между сборками и версиями протокола. Подробнее - «Фаза и направление».

  • пакет - IncomingPacket на входе, OutgoingPacket на выходе: общая валюта всех слоёв библиотеки, номер и тело. Подробнее - «Что видно снаружи».

  • порог сжатия - CompressionThreshold у MinecraftClient. Пакет короче порога уходит как есть, не короче - сжимается libdeflate. Подробнее - «Сжатие и шифрование».

  • посетитель - IPacketVisitor с методами Visit<T> и Unknown, синхронный способ разобрать пакет через PacketFlow.Dispatch. Для асинхронных методов не годится, поэтому обработчик сделан отдельно. Подробнее - «Кто кого знает».

  • реестр пакетов - PacketRegistry. Переводит номер пакета вместе с фазой, направлением и версией протокола в описание пакета или сам типизированный объект. Подробнее - «Из сырого пакета».

  • сырой пакет - то, что отдаёт транспорт: номер и кусок байтов, без знания о том, что это за пакет и какие у него поля. Подробнее - «Четыре слоя на одном экране».

  • фаза - PacketPhase. Handshaking, status, login, configuration, play - подряд идущие стадии сессии. Библиотека фазу сама не выводит, её переставляет код приложения. Подробнее - «Фаза и направление».

Дальше