shr3dd3r
77127fecb4
Описаны некоторые типы системных событий; добавлено понятие категории системных событий; у потоков теперь есть таймауты.
59 lines
4.8 KiB
Markdown
59 lines
4.8 KiB
Markdown
# Системное событие
|
||
|
||
Системное событие представляет из себя смысловую единицу в определённом формате, помещаемую в пакеты с установленным флагом системного события и предназначенную для управления соединением. Событие состоит из типа и тела. Тип описывает способ интерпретации тела, а тело содержит данные в формате 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
|
||
|
||
Ответ на любой из запросов. Содержит код ответа (успеха или ошибки), описание ошибки (опционально) и произвольные данные (опционально).
|