stadium-proto/Сериализация (LBM).md
shr3dd3r a9cbbc5482 Множественные исправления
Правки, внесённые в связи с последними изменениями, уточнениями и пожеланиями.
2024-05-24 00:06:47 +03:00

60 lines
2.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Сериализация и формат LBM
Данный формат сериализации используются в теле системных событий и рукопожатии. Данные сериализованные в формат LBM (AKA "данные в формате LBM") являются расположенными последовательно ячейками с ключом, длинной значения и значением, в неопределённом порядке относительно друг-друга. Положение ячеек относительно друг-друга не детерминированно и они могут быть намеренно перемешаны. Отсутствие каких-либо ячеек вообще обозначается единичным нулевым байтом.
Ключ является однобайтным числом без знака. Ключ всегда больше нуля. В каждом контексте (контекст системных событий и контекст рукопожатия) есть свой набор выделенных ключей. Все остальные, неиспользуемые ключи при парсинге опускаются. Длинна значения является двухбайтным числом без знака. Если ячейка пуста, то длинна нулевая. Значением является произвольная последовательность байт.
Одна ячейка имеет следующий вид:
```text
B: byte(s)
|------------|
| Key: 1B |
|------------|
| Length: 2B |
|------------|
| Value: ~B |
|------------|
```
Пример в шестнадцатеричном представлении:
```text
Length in bytes
|
VVVV
0xDA00080123456789ABCDEF
^^ ^^^^^^^^^^^^^^^^
| |
Key Value
```
Следовательно, форматированные данные целиком имеют вид:
```text
|------------|
| Cell 1: ~B |
|------------|
| Cell 2: ~B |
|------------|
| ... |
|------------|
| Cell N: ~B |
|------------|
```
Пример в шестнадцатеричном представлении:
```text
Cell #4 (1B)
Cell #2 (4B) |
| |
VVVVVVVVVVVVVV VVVVVVVV
0xDA00080123456789ABCDEFF10004FEDCBA98220000340001FF... (and so on)
^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^
| |
Cell #1 (8 bytes length) |
Cell #3 (empty cell)
```