151 lines
4.6 KiB
Text
151 lines
4.6 KiB
Text
@startuml Desktop Server Workflow
|
||
skinparam sequenceMessageAlign center
|
||
|
||
title Ivideon Desktop Server (MacBook) - Camera Addition Workflow
|
||
|
||
actor "User" as user
|
||
participant "Ivideon Server\nApp (MacBook)" as app
|
||
participant "MacBook\nFaceTime Camera" as camera
|
||
participant "API5/API4" as api
|
||
database "MongoDB" as db
|
||
participant "Broker/Hive" as broker
|
||
|
||
== ЭТАП 1: Установка и авторизация ==
|
||
|
||
user -> app: Запускает приложение
|
||
activate app
|
||
|
||
app -> user: Показывает форму входа
|
||
user -> app: Вводит email + password
|
||
|
||
app -> api: POST /auth\n{email, password}
|
||
activate api
|
||
api -> db: Валидация credentials
|
||
api --> app: {access_token, user_id, session_id}
|
||
deactivate api
|
||
|
||
note right of app
|
||
Приложение получило
|
||
access_token для
|
||
API запросов
|
||
end note
|
||
|
||
== ЭТАП 2: Автоматическая регистрация сервера ==
|
||
|
||
app -> app: Определяет параметры:\n- device_id = MacBook SN\n- build_type = "mac_server"\n- name = "MacBook Pro"
|
||
|
||
app -> api: POST /public/roster\n{login: "user@example.com",\nname: "MacBook Pro",\ndevice_id: "ABC123",\nbuild_type: "mac_server"}
|
||
activate api
|
||
|
||
api -> api: DeviceInfo.guess_from_request()\n→ device_type = DESKTOP
|
||
|
||
api -> api: initiate_desktop_attachment()
|
||
note right
|
||
Создание СУРРОГАТНОГО
|
||
attachment token
|
||
(пользователь не создавал!)
|
||
end note
|
||
|
||
api -> db: FIND user by login\n"user@example.com"
|
||
db --> api: {_id: "100-user123"}
|
||
|
||
api -> db: CREATE attachment_token\n{_id: "ABC123",\nuser: "100-user123",\nname: "MacBook Pro",\ntype: "serial_number"}
|
||
|
||
api -> api: consume_attachment_token()
|
||
|
||
api -> db: CREATE/UPDATE server\n{uin: generate(),\nowner: "100-user123",\nname: "MacBook Pro",\npassword: random()}
|
||
db --> api: {uin: "100-abc...",\npassword: "Kfnl31ba..."}
|
||
|
||
api --> app: {uin: "100-abc...",\npassword: "Kfnl31ba...",\nname: "MacBook Pro"}
|
||
deactivate api
|
||
|
||
== ЭТАП 3: Сохранение credentials ==
|
||
|
||
app -> app: Сохранение в config:\n~/Library/.../config.xml\n<uin>100-abc...</uin>\n<password>Kfnl31ba...</password>
|
||
|
||
== ЭТАП 4: Подключение к облаку ==
|
||
|
||
app -> broker: CONNECT\n{uin: "100-abc...",\npassword: "Kfnl31ba..."}
|
||
activate broker
|
||
|
||
broker -> db: VERIFY credentials
|
||
db --> broker: OK
|
||
|
||
broker -> db: UPDATE servers\n{online: true}
|
||
|
||
broker --> app: Connected
|
||
deactivate broker
|
||
|
||
note right of app
|
||
Сервер подключен к облаку
|
||
Статус: ONLINE
|
||
end note
|
||
|
||
== ЭТАП 5: Обнаружение доступных камер ==
|
||
|
||
app -> app: Сканирование устройств:\n- USB камеры\n- IP-камеры (UPnP/ONVIF)\n- Вручную добавленные
|
||
|
||
app -> camera: Опрос устройства
|
||
camera --> app: {name: "FaceTime HD",\ntype: "USB",\ncodec: "h264",\nresolution: 1280x720}
|
||
|
||
app -> user: Показывает список:\n☐ FaceTime HD Camera\n☐ IP Camera (192.168.1.105)
|
||
|
||
note right of user
|
||
Пользователь видит все
|
||
доступные камеры
|
||
и выбирает нужные
|
||
end note
|
||
|
||
== ЭТАП 6: Активация камеры ==
|
||
|
||
user -> app: Выбирает ☑ FaceTime HD Camera
|
||
|
||
app -> app: Присваивает ID камере:\ncam_id = 65536
|
||
|
||
app -> broker: NOTIFICATION: new_cams\n{server_id: "100-abc...",\ncameras: {\n "65536": {\n name: "FaceTime HD",\n online: true,\n type: "web"\n }\n}}
|
||
activate broker
|
||
|
||
broker -> api: Пересылка notification
|
||
deactivate broker
|
||
activate api
|
||
|
||
api -> api: roster.new_cams()
|
||
|
||
api -> db: UPDATE servers.cameras.65536\n{name: "FaceTime HD",\nonline: true,\nbilling_initialized: true}
|
||
|
||
api -> api: b5_new_cams()\nПодключение услуг
|
||
|
||
api -> db: CREATE cam_services.65536\n{archive, notifications, ...}
|
||
|
||
api -> api: Отправка метрики\nDeviceCreationMetric
|
||
|
||
deactivate api
|
||
|
||
== ЭТАП 7: Камера доступна ==
|
||
|
||
user -> api: GET /cameras\nAuthorization: Bearer <access_token>
|
||
activate api
|
||
|
||
api -> db: FIND servers\nwhere owner_id = "100-user123"
|
||
db --> api: [{cameras: {"65536": {...}}}]
|
||
|
||
api --> user: [\n {\n id: "100-abc...:65536",\n name: "FaceTime HD Camera",\n type: "web",\n online: true\n }\n]
|
||
deactivate api
|
||
|
||
== ЭТАП 8: Добавление второй камеры (IP) ==
|
||
|
||
user -> app: Добавить IP-камеру\nrtsp://192.168.1.105
|
||
|
||
app -> app: cam_id = 131072
|
||
|
||
app -> broker: NOTIFICATION: new_cams\n{cameras: {\n "131072": {...}\n}}
|
||
|
||
note right
|
||
Процесс повторяется
|
||
для каждой новой камеры
|
||
|
||
IDs инкрементируются:
|
||
65536, 131072, 196608, ...
|
||
end note
|
||
|
||
@enduml
|