Структуры данных
Эта страница описывает основные структуры из 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.