Add SessionInfoFloat component to SessionPage and enhance session management in server

- Introduced SessionInfoFloat component to display session details when a session is active.
- Updated session server logic to automatically transition sessions to "ending" status when their end time is reached.
- Improved process termination handling with enhanced error checking and fallback mechanisms.
- Refactored application stop logic to handle multiple processes more efficiently and added timeout management for process termination.
This commit is contained in:
2025-12-10 20:12:32 +05:00
parent e8b8eca0d6
commit a80544c936
6 changed files with 330 additions and 28 deletions
+14 -3
View File
@@ -92,7 +92,12 @@ Session Server автоматически управляет игровыми с
### Как это работает
1. **Проверка сессий**: Каждую секунду (или согласно `SESSION_CHECK_INTERVAL_MS`) сервер запрашивает у основного API список сессий для этого сервера
2. **Запуск приложений**: Для сессий со статусом `starting`:
2. **Проверка времени окончания**: Для активных сессий (`started` или `starting`):
- ⏰ Проверяется время `endAt` - если оно наступило, сессия автоматически переводится в статус `ending`
- **Timezone**: Все время хранится в UTC, сравнение корректно работает независимо от часового пояса сервера
- По умолчанию сессии создаются с временем окончания +30 минут от момента создания
- Автоматическое завершение гарантирует, что сессии не будут работать бесконечно
3. **Запуск приложений**: Для сессий со статусом `starting`:
- ⏰ Проверяется время `startAt` - приложение запускается только если это время уже наступило
- **Timezone**: Все время хранится в UTC, сравнение корректно работает независимо от часового пояса сервера
- Запланированные сессии (с будущим `startAt`) логируются с информацией о времени до запуска
@@ -104,13 +109,13 @@ Session Server автоматически управляет игровыми с
- Запускается соответствующее приложение
- Отслеживается PID процесса
- Статус сессии обновляется на `started` на главном сервере
3. **Остановка приложений**: Для сессий со статусом `ending`:
4. **Остановка приложений**: Для сессий со статусом `ending`:
- Используется `taskkill /pid {PID} /T /F` для завершения всего дерева процессов
- `/T` - завершает указанный процесс и ВСЕ дочерние процессы
- `/F` - принудительное завершение
- Решает проблему с UE5 и другими приложениями, создающими дочерние процессы
- Статус сессии обновляется на `ended` на главном сервере
4. **Автоматическая очистка**: Процессы для неактивных сессий автоматически останавливаются
5. **Автоматическая очистка**: Процессы для неактивных сессий автоматически останавливаются
### API endpoints для управления сессиями
@@ -182,6 +187,12 @@ C:\apps\
[2025-10-06T10:02:01.100Z] ✅ Статус сессии 123e4567-e89b-12d3-a456-426614174000 обновлен на "started"
```
Автоматическое завершение по истечении времени:
```
[2025-10-06T10:32:00.000Z] ⏰ Время сессии 123e4567-e89b-12d3-a456-426614174000 (minecraft) истекло, завершение...
[2025-10-06T10:32:00.100Z] ✅ Статус сессии 123e4567-e89b-12d3-a456-426614174000 обновлен на "ending"
```
Остановка сессии:
```
[2025-10-06T10:32:00.000Z] 🛑 Остановка приложения для сессии 123e4567-e89b-12d3-a456-426614174000 (PID: 12345)