Files
2022-11-22 18:28:29 +05:00

66 lines
4.6 KiB
Plaintext

Задача координирующего сервера создать сессию для клиента или связать клиента с сессией, запланировать сессию,
координирующий сервер знает все активные сессии и список серверов сессий с помощью файла конфига servers.json (обновляет раз в N секунд)
и постоянного соединения с серверами:
1) имеет 2 файла конфига servers.json и configuration.json
a) "servers.json" содержит список серверов "массив верхнего уровня": и их название, адрес, описание вида
{
"server_name1":"SomeName1",
"ip":"0.0.0.0", "port":"111",
"info":{
"deskription":[
{"en":"best RC and ..."},
{"ru":"луший ЖК и"}
]}
}
b) "configuration.json" содержит конфигурацию координатора
{"ip":"0.0.0.2", "port":"333", "time_between_updates_seconds":"30"}
2) Подключаемся к координатору с помощью websocket и SSL,
a) при подключении к координатору пользователь получает уникальный id
{"verb":"GET_TITLES", "range":"X-Y"} (range это сервера с X до Y, например с 0-20 или 20-213, количество серверов = Y - X + 1)
a) в случае успеха получаем {"msg":"SERVERS_FOUND", "servers":"{данные из примера "1)a)" }"}
b) в случае неудачи получаем {"msg":"SERVERS_NOT_FOUND"}
3) Пользователь планирует сессию с помощью запроса {"verb":"PLAN_SESSION", "rc_name":"SomeRC", "date":"day/month/year", "time":"00:00"}
a) в браузере доступен выбор только того времени которое не занято
b) координатор сохраняет сессию в список запланированных сессий, файл формата JSON, sessions_planned.json
и выдаёт четырёхзначный код с помощью которого можно будет подключиться к сессии в назначенное время {"msg":"CONNECTION_CODE", "code":"1234"}
4) Если пользователь хочет создать сессию без планирования то посылает запрос {"verb":"CREATE_SESSION", "rc_name":"SomeRC"},
координатор создаёт сессию на свободном сервере и возвращает {"verb":"CONNECT_TO_SESSION", "ip":"0.0.0.1", "port":"1111", "code":"1234"},
если все сервера заняты вернёт {"msg":"SERVERS_BUSY"}, когда координатор получает запрос "CREATE_SESSION":
a) координатор проверяет список планирования чтобы убедиться что на данное время нет активных записей, затем свободному серверу сессий
отправляет запрос на создание сессии {"verb":"CREATE_SESSION", "rc_name":"SomeRC", "user_id":"id123"},
если создать сессию можно, сервер сессий вернёт {"verb":"CONNECT_TO_SESSION", "ip":"0.0.0.1", "port":"1111", "code":"1234"}
b) когда клиент получил данные для подключения к сессии он устанавливает соединение с сервером сессий с помощью сокета
и разрывает соединение с координатором (может быть не стоит разрывать соединение с координатором)
5) Если пользователь хочет подключиться к сессии с помощью кода то посылает запрос
{"verb":"CONNECT_SESSION_WITH_CODE", "code":"1234"},
в ответ придёт {"verb":"CONNECT_TO_SESSION", "ip":"0.0.0.1", "port":"1111", "code":"1234"}, или
если сессии не существует {"msg":"SESSION_NOT_EXIST"}.
COMMANDS:
{"verb":"GET_TITLES", "start":0, "count":50}
{"verb":"PLAN_SESSION", "title":"SomeRC", "year":2022, "month":11, "day":4, "hour":20, "minute":13, "period_minute":30}
{
"title":"SomeRC",
"data":[
{
"ip":"127.0.0.1",
"port":"0000",
"copies":5
},
{
"ip":"127.0.0.2",
"port":"0001",
"copies":2
}
]}
{"verb":"CREATE_SESSION", "title":"SomeRC"}