Словарь
Термины, которые уже встречаются в документации. У каждого - краткое значение и ссылка на страницу, где он разобран подробно.
-
версия протокола - число, которое клиент присылает в рукопожатии (например, 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 - подряд идущие стадии сессии. Библиотека фазу сама не выводит, её переставляет код приложения. Подробнее - «Фаза и направление».