Skip to content

Структуры данных

Эта страница описывает основные структуры из Engine/Proto. Поля not transmitted используются локально и не должны считаться частью wire contract.

Member

Source: Engine/Proto/Member.h.

Поле Тип Назначение
id int64 User/member id.
type MemberType 0=Undefined, 1=Ordinal, 2=Service.
state MemberState Текущее состояние пользователя.
login string Логин.
name string Отображаемое имя.
number string Номер/внутренний идентификатор.
icon string Icon payload/reference.
avatar string Avatar payload/reference.
groups Group[] Группы пользователя.
max_input_bitrate uint32 Ограничение входящего bitrate.
order uint32 Порядок в конференции/списках.
has_camera bool Камера доступна/видима.
has_microphone bool Микрофон доступен/слышен.
has_demonstration bool Демонстрация доступна/видима.
grants uint32 Bitmask прав участника.
deleted bool Tombstone/delete marker.
unreaded_count uint32 Локальное поле, не передается.

Conference

Source: Engine/Proto/Conference.h.

Поле Тип Назначение
id int64 Conference id.
tag string Stable tag для URL/API/connect.
name string Название.
descr string Описание.
founder string Имя владельца.
founder_id int64 Id владельца.
type ConferenceType 1=Symmetric, 2=Asymmetric, 3=AsymmetricWithSymmetricSound.
grants uint32 Bitmask прав/ограничений конференции.
duration uint64 Длительность/лимит.
members Member[] Участники.
connect_members bool Автоматическое подключение участников.
temp bool Временная конференция.
deleted bool Tombstone/delete marker.
unreaded_count uint32 Локальное поле, не передается.
rolled bool Локальное поле, не передается.

Group

Source: Engine/Proto/Group.h.

Поле Тип Назначение
id int64 Group id.
parent_id int64 Parent group id.
tag string Stable tag.
name string Название.
owner_id int64 Владелец.
password string Пароль/ключ группы, если используется.
grants uint32 Bitmask прав группы.
level int32 Уровень в дереве.
deleted bool Tombstone/delete marker.
rolled bool Локальное поле, не передается.

Message

Source: Engine/Proto/Message.h.

Поле Тип Назначение
guid string Stable message id.
dt time_t Timestamp.
type MessageType Text, call, file/media/service states.
author_id, author_name int64/string Автор содержимого.
sender_id, sender_name int64/string Отправитель.
subscriber_id, subscriber_name int64/string Получатель для p2p.
conference_tag, conference_name string Контекст конференции.
status MessageStatus Created, Sended, Delivered, Readed, Modified, Deleted.
text string Текст или JSON payload service message.
call_duration int32 Длительность звонка.
call_result CallResult Answered, Missed, Rejected, Busy, Offline.
preview string Preview payload/reference.
data string Дополнительные данные.
url string External URL.

MessageType values:

Value Meaning
1 TextMessage
2 Call
3 Join
4 Leave
5 Image
6 Document
7 Forwarded
8 Video
9 VoiceMessage
10 VideoMessage
11 Typing
12 RecordingVoice
13 RecordingVideo
14 ServiceMessage

ServiceMessage не является отдельной командой. Это обычное Message внутри delivery_messages, но его text содержит JSON payload служебного события. Клиент должен распознавать поддерживаемые service payloads и не показывать их в ленте как обычные сообщения. Например, реакции используют {"type":"vg.reaction.v1",...}.

Blob

Source: Engine/Proto/Blob.h.

Поле Тип Назначение
id int64 Blob id.
owner_id int64 Владелец.
guid string Stable blob id.
type BlobType 1=Image, 2=Document, 3=Voice, 4=CircleVideo.
status BlobStatus NotFound, Created, Received, Modified, Deleted.
action BlobAction SpeedTest, Storage, P2P.
data string Blob data/reference.
preview string Preview data/reference.
name string File name.
description string Description.
deleted bool Tombstone/delete marker.

Device values in device_connect

device_connect не отдельная структура в Engine/Proto, но это ключевой wire object.

Поле Назначение
device_id Control id устройства.
client_id Владелец устройства.
device_type Camera/Microphone/Demonstration/etc.
receiver_ssrc SSRC receiving side.
author_ssrc SSRC publishing side.
port Translator port.
resolution, color_space, video_codec, audio_codec Media parameters.
my 1, если событие относится к локальному устройству текущего клиента.
secure_key Key для RTP payload crypto.

Grants

grants — bitmask. Не интерпретировать как enum value. Перед проверкой конкретного права использовать bit operations (BitIsSet, BitIsClear) и соответствующие enum definitions:

  • Engine/Proto/MemberGrants.h;
  • Engine/Proto/ConferenceGrants.h;
  • Engine/Proto/GroupGrants.h;
  • Server/Processor/API.h для API token grants.

Важно разделять три независимых слоя прав:

Слой Где хранится Что описывает Примеры
Роль аккаунта user grants Уровень администрирования сервера platform.owner, platform.admin, user
Capability аккаунта user grants Продуктовые/тарифные возможности создание конференций, приватных/публичных групп, записи, AI
Grants участника конференции Member.grants Оперативное поведение в конкретной конференции Speaker, Moderator, ReadOnly, Deaf, запреты микрофона/камеры

Роли аккаунта не должны использоваться для модерации конкретной конференции. Модерация конференции должна идти только через MemberGrants. Тарифы и прокачка аккаунта должны идти через account capabilities, даже если физически они пока упакованы в ту же bitmask clients.grants.

Account roles and capabilities

clients.grants используется как bitmask аккаунта. В 3.0 логически разделены роли, продуктовые возможности и технические флаги.

Bit Id Тип Meaning
0 conferences.create Capability Пользователь может создавать свои конференции.
4 transport.udp.deny Technical flag Принудительно не использовать UDP для пользователя.
5 transport.consolidator Technical flag Использовать media consolidator.
20 platform.owner Role Владелец сервера, полный административный доступ.
21 platform.admin Role Технический администратор сервера.
22 ai.access Capability Доступ к AI-функциям.
23 recordings.access Capability Доступ к записи и архиву.
24 groups.private.create Capability Может создать свою приватную группу/семью на сервере.
25 groups.public.create Capability Может создать публичную группу; обычно выдаётся тарифом.

platform.owner и platform.admin открывают админку. groups.private.create, groups.public.create, conferences.create, recordings.access, ai.access являются самостоятельными capabilities и не должны проверяться как “админ или не админ”.

MemberGrants

Member.grants описывает права конкретного участника внутри конференции.

Bit Name Meaning
10 Presenter Ведущий/owner конференции.
11 Speaker Участник имеет слово.
12 Moderator Участник может модерировать конференцию.
14 ReadOnly Участник не может публиковать устройства.
15 Deaf Участнику запрещен прием звука конференции.
16 DenyMicrophone Участнику запрещено включать микрофон, пока у него нет Speaker.
17 DenyCamera Участнику запрещено включать камеру, пока у него нет Speaker.

ReadOnly и Deaf являются жесткими персональными ограничениями. DenyMicrophone и DenyCamera являются персональными ограничениями режима слушателя: клиент должен отображать микрофон и камеру как недоступные, пока у участника нет Speaker, но должен разблокировать их после выдачи слова без очистки deny-битов.

ConferenceGrants

Conference.grants описывает политику всей конференции.

Bit Name Meaning
0 DenyTurnSpeak Участники не могут самостоятельно просить слово.
1 DisableMicrophoneIfNoSpeak Микрофон доступен только участнику со словом.
2 DisableCameraIfNoSpeak Камера доступна только участнику со словом.
3 DontAskTurnDevices Не запрашивать включение устройств автоматически.
5 DisableSpeakerChange Ограничить самостоятельное изменение статуса speaker.
7 DenyTurnMicrophone Запретить включение микрофона политикой конференции, пока у участника нет Speaker.
8 DenyTurnCamera Запретить включение камеры политикой конференции, пока у участника нет Speaker.

want_speak допустим только для floor-based политики DisableMicrophoneIfNoSpeak или DisableCameraIfNoSpeak, когда участник не имеет Speaker и самостоятельный запрос слова не запрещен. Для персональных deny-битов клиент должен блокировать действие без повторных запросов слова; модератор снимает блокировку выдачей Speaker.