Подключение и логин
Клиент начинает работу с CommandLoop. Остальные каналы открываются после получения access_token или при необходимости.
sequenceDiagram
participant Client
participant ControlWS as CommandLoop WebSocket
participant Processor
participant ClientContainer
Client->>ControlWS: open WebSocket
Client->>Processor: connect_request(login/password or token)
Processor->>ClientContainer: AddClient(session, credentials, CommandLoop)
ClientContainer-->>Processor: client id, connection id, access token
Processor-->>Client: connect_response(result=OK, access_token, grants)
Processor-->>Client: conferences_list
Client->>Processor: contact_list / group_list / other commands
Каналы после логина
flowchart LR
Login[CommandLoop connect_response]
Token[access_token]
Blob[BlobChannel connect_request with access_token]
Media[WSMedia connect_request with access_token]
Login --> Token
Token --> Blob
Token --> Media
Инварианты логина
access_tokenсвязывает дополнительные каналы с уже авторизованным пользователем.CommandLoopостаётся источником правды по конференциям, устройствам и сообщениям.WSMediaне должен пытаться логиниться логином/паролем; он подключается поaccess_token.- Один клиент может иметь несколько transport sessions, но только control session управляет lifecycle.