stadium-proto/Системное событие.md
shr3dd3r 77127fecb4 Конкретные типы сист. событий и таймаут потока
Описаны некоторые типы системных событий; добавлено понятие категории системных событий; у потоков теперь есть таймауты.
2024-06-09 17:45:33 +03:00

59 lines
4.8 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.

# Системное событие
Системное событие представляет из себя смысловую единицу в определённом формате, помещаемую в пакеты с установленным флагом системного события и предназначенную для управления соединением. Событие состоит из типа и тела. Тип описывает способ интерпретации тела, а тело содержит данные в формате KLV.
Тип события является однобайтным целым числом без знака. Событие может предполагать ответ от противоположного узла или не требовать оный. Наличие необходимости ответа определяется типом, в каждом случае индивидуально. Корректный тип события никогда не равен нулю.
У каждого типа события есть категории: Client-to-Server (C2S) и Server-to-Client (S2C). Один тип события может находится сразу в двух категориях. Первая категория подразумевает, что событие этого типа должен обрабатывать только сервер, второе - только клиент. Если тип события находится в обоих категориях, то оно должно обрабатываться как сервером, так и клиентом.
Структура события может быть представлена следующим образом:
```text
B: byte(s)
|----------|
| Type: 1B |
|----------|
| Body: ~B |
|----------|
```
### Список конкретных типов системных событий
Для справки: представленный перечень не является исчерпывающим, а также тут не будут описаны поля и соответствия между ними и KLV-ключами, что будет сделано в полной версии спецификации.
#### EnumerateTransport
**Категория**: C2S
Запрос на выдачу списка адаптеров, по которым можно подключиться к текущему серверу. Ответ содержит либо ошибку, либо перечень адресов транспортных адаптеров. В содержимом события могут быть указаны критерии фильтрации выдачи, например, конкретный вид транспортного адаптера.
#### UpdateStreamParams
**Категория**: C2S
Запрос на обновление параметров потока. Ответ содержит либо ошибку с указанием на конкретный её источник, либо сообщение об успешности операции. В содержимом события указаны лишь те параметры, которые предполагается изменить.
#### CreateStream
**Категория**: C2S
Запрос на создание нового потока с избранными параметрами. Ответ содержит либо ошибку, либо сообщение об успехе.
#### TerminateStream
**Категория**: C2S
Запрос на уничтожение существующего потока. Ответ содержит либо ошибку об отсутствии указанного потока, либо сообщение об успехе.
#### TerminateSession
**Категория**: C2S, S2C
Запрос на уничтожение сессии. Так как в протоколе существует понятие таймаута, для корректного завершения сессии требуется оповещение противоположного узла. После получения события этого типа узлом - он обязан ответить сообщением об успешности операции, после доставки которого оба узла должны уничтожить все потоки в сессии и саму сессию.
#### Answer
Ответ на любой из запросов. Содержит код ответа (успеха или ошибки), описание ошибки (опционально) и произвольные данные (опционально).