37 lines
3.2 KiB
Plaintext
37 lines
3.2 KiB
Plaintext
Задача стримингового сервера создавать сессии по запросу координатора, поддерживать соединение с клиентами в рамках сессии,
|
|
запускать приложение_ЖК и WebRTC сервер в рамках одной сессии, упраление пользователями (присвоение управления и т.д.),
|
|
завершение сессии, приложения_ЖК и WebRTC сервера.
|
|
|
|
1) Сервер сессий имеет файл config.json в котором содержатся данные о (ip, port, допустимое количество сессий и данные для работы WebRTC).
|
|
|
|
2) Координирующий сервер знает лимит сервера сессий и присылает запрос на создание сесии {"verb":"CREATE_SESSION", "user_id":"id123"},
|
|
запускает приложение_ЖК и WebRTC сервер, затем отправляет ответ координатору
|
|
{"verb":"CONNECT_TO_SESSION", "ip":"0.0.0.1", "port":"1111", "code":"1234"}
|
|
|
|
3) Затем координатор подключает пользователя к серверу сессий с помощью сокета ("ip":"0.0.0.1", "port":"1111") и присылает запрос
|
|
{"verb":"CONNECT_USER_TO_SESSION", "code":"1234", "user_id":"id123"}, после чего сервер сессий отправляет 2 запроса
|
|
первый запрос координатору который говорит о том что пользователь подключился
|
|
{"msg":"SESSION_CONNECTION_ESTABLISHED", "WebRTC_connection_data":"https://ip:port"} (список данных дополнится),
|
|
после чего пользователь подключается к стриму (процесс подключения дополнится)
|
|
|
|
4) Во время соединения пользователи могут обмениваться данными внутри сессии (список данных дополнится)
|
|
|
|
5) Если все пользователи отключились от сессии то закрывается приложение ЖК, сервер WebRTC и уничтожается сессия
|
|
|
|
|
|
Архитектура программы в порядке взаимодействия с клиентом:
|
|
|
|
сессия (класс):
|
|
публичные:
|
|
конструктор(максимальное_количетсво_пользователей,
|
|
обьект_логов(записать),
|
|
обьект_приложения(запустить, завершить),
|
|
обьект_WebRTC_сервера(запустить,завершить)
|
|
):
|
|
обьект_приложения.запустить()
|
|
обьект_WebRTC_сервера.запустить()
|
|
функции:
|
|
~деструктор:
|
|
обьект_приложения.завершить()
|
|
обьект_WebRTC_сервера.завершить()
|
|
ПОДУМАТЬ_НАД_ОБЬЕКТОМ.сообщить_серверу_сессий_что_сессия_завершилась() |