| title | Сетевой протокол |
|---|
TaskFlux использует свой собственный сетевой протокол. Общие характеристики описаны здесь (настройки, структуры данных и т.д.) Этот протокол используется для общения как между узлами, так и между клиентом и сервером.
Для общения используются сокеты. Работа идет поверх TCP протокола.
Обмен данными идет в Big-Endian формате.
В этой секции описаны общие для всех сетевых протоколов структуры данных (типы). Каждый протокол может определить свои.
Используемые в пакетах примитивные типы данных:
| Название | Длина | Диапазон | Описание |
|---|---|---|---|
| Byte | 1 байт | [0; 255] | Беззнаковое, целое число |
| Int32 | 4 байта | [-2147483648; 2147483647] | Знаковое, целочисленное значение. |
| UInt32 | 4 байта | [0; 4294967295] | Беззнаковое, целочисленное значение. |
| Int64 | 8 байт | [-9223372036854775808; 9223372036854775807] | Целочисленное значение |
| Bool | 1 байт | [0; 1] | Логический тип. false - байт 0 true - байт 1. На практике, любое значение отличное от нуля интерпретируется как true |
Если после названия типа в скобках указано значение, то оно используется в качестве константы для этого поля.
Например, Bool(0) означает, что в этом поле всегда будет присутствовать 0 - false, а Int32(100) - то, что в этом
поле всегда находится число 100 (знаковое, 4-х байтное).
Поверх базовых типов построены составные, вспомогательные:
| Название | Базовый размер | Описание | Визуальное расположение |
|---|---|---|---|
| Array<T> | 4 байта | Обобщенный массив тип данных T фиксированного значения. Количество элементов указывается в начале пакета типа через Int32. Далее следуют значения типа друг за другом без специальных маркеров |
Int32 | T[] |
| String | 4 байта | Строковое значение. Первые 4 байта указывают длину строки. Дальше идет массив байтов указанной прежде длины. Используется кодировка UTF-8, если не указано иное |
Int32 | Array<Byte> |
| Buffer | 4 байта | Массив байт фиксированной длины. Длина указывается в первых 4 байтах (целочисленное значение). | Int32 | Array<Byte> |
| Pair<T1, T2> | - | Пара из 2 значений типов T1 и T2. Значения следуют друг за другом без специальных маркеров разделителя или начала. |
T1 | T2 |
| Dict<T1, T2> | 4 байта | Список из нескольких пар значений типов T1 и T2 (в T1 и T2 необходимо подставить реальный тип данных). Значения типов следуют друг за другом. Количество пар указывается в первых 4 байтах через Int32. |
Array<Pair<T1, T2>> |
| QueueName | 1 байт | Название очереди. Первый байт указывает на длину, и дальше идет N байтов названия. Используемая кодировка - ASCII |
Byte | Byte[N] |
| Nullable<T> | 1 байт | Обертка над типом T, позволяющая указывать отсутствие значения. Первым байтом идет Boolean: true - дальше идет значение T (его структура должна быть известна), false - дальше ничего не записано |
Byte | T |
Примечание: значения ключей в типе
Dictмогут повторяться
Символы внутри угловых скобок указывают на используемую внутри структуру данных.
Например, Nullable\<Int32> указывает, что в этом поле может находиться null, либо Int32.