228 lines
8.4 KiB
Bash
Executable File
228 lines
8.4 KiB
Bash
Executable File
#!/bin/bash
|
||
|
||
# GodEye Complete Setup & Launch Script
|
||
# Скрипт для запуска полной инфраструктуры GodEye
|
||
|
||
echo "🚀 GodEye Complete Infrastructure Setup"
|
||
echo "======================================="
|
||
|
||
# Функция для получения IP адреса
|
||
get_local_ip() {
|
||
local ip=$(ip route get 1.1.1.1 | awk '{print $7}' | head -1)
|
||
if [ -z "$ip" ]; then
|
||
ip=$(hostname -I | awk '{print $1}')
|
||
fi
|
||
echo "$ip"
|
||
}
|
||
|
||
# Получаем локальный IP
|
||
LOCAL_IP=$(get_local_ip)
|
||
echo "🌐 Локальный IP адрес: $LOCAL_IP"
|
||
|
||
# Проверяем зависимости
|
||
echo ""
|
||
echo "🔍 Проверка зависимостей..."
|
||
|
||
# Проверяем Python
|
||
if ! command -v python3 &> /dev/null; then
|
||
echo "❌ Python3 не найден! Установите Python3"
|
||
exit 1
|
||
fi
|
||
|
||
# Проверяем websockets
|
||
if ! python3 -c "import websockets" 2>/dev/null; then
|
||
echo "📦 Установка websockets..."
|
||
pip3 install websockets
|
||
fi
|
||
|
||
# Проверяем adb
|
||
if ! command -v adb &> /dev/null; then
|
||
echo "❌ ADB не найден! Установите Android SDK Platform Tools"
|
||
echo "sudo apt install android-tools-adb android-tools-fastboot"
|
||
exit 1
|
||
fi
|
||
|
||
echo "✅ Все зависимости установлены"
|
||
|
||
# Функция для остановки всех процессов
|
||
cleanup() {
|
||
echo ""
|
||
echo "🛑 Остановка всех сервисов..."
|
||
|
||
# Остановка сигналинг сервера
|
||
if [ ! -z "$SIGNALING_PID" ]; then
|
||
kill $SIGNALING_PID 2>/dev/null
|
||
echo "📡 Сигналинг сервер остановлен"
|
||
fi
|
||
|
||
# Остановка веб сервера
|
||
if [ ! -z "$WEB_PID" ]; then
|
||
kill $WEB_PID 2>/dev/null
|
||
echo "🌐 Веб сервер остановлен"
|
||
fi
|
||
|
||
echo "👋 Система остановлена"
|
||
exit 0
|
||
}
|
||
|
||
# Обработка сигнала прерывания
|
||
trap cleanup SIGINT SIGTERM
|
||
|
||
# Создаем директории для логов
|
||
mkdir -p logs
|
||
|
||
echo ""
|
||
echo "🔧 Запуск сервисов..."
|
||
|
||
# 1. Запуск сигналинг сервера
|
||
echo "📡 Запуск сигналинг сервера на порту 8765..."
|
||
python3 signaling_server.py > logs/signaling.log 2>&1 &
|
||
SIGNALING_PID=$!
|
||
|
||
# Ждем запуска сигналинг сервера
|
||
sleep 2
|
||
|
||
# Проверяем что сигналинг сервер запустился
|
||
if ps -p $SIGNALING_PID > /dev/null; then
|
||
echo "✅ Сигналинг сервер запущен (PID: $SIGNALING_PID)"
|
||
else
|
||
echo "❌ Ошибка запуска сигналинг сервера"
|
||
cat logs/signaling.log
|
||
exit 1
|
||
fi
|
||
|
||
# 2. Запуск простого веб сервера для интерфейса оператора
|
||
echo "🌐 Запуск веб сервера на порту 8080..."
|
||
python3 -m http.server 8080 > logs/webserver.log 2>&1 &
|
||
WEB_PID=$!
|
||
|
||
# Ждем запуска веб сервера
|
||
sleep 1
|
||
|
||
if ps -p $WEB_PID > /dev/null; then
|
||
echo "✅ Веб сервер запущен (PID: $WEB_PID)"
|
||
else
|
||
echo "❌ Ошибка запуска веб сервера"
|
||
exit 1
|
||
fi
|
||
|
||
# 3. Обновляем IP адрес в веб интерфейсе
|
||
echo "🔧 Обновление IP адреса в интерфейсе оператора..."
|
||
sed -i "s/localhost:8765/${LOCAL_IP}:8765/g" operator-interface.html
|
||
|
||
# 4. Проверяем подключение Android устройства
|
||
echo ""
|
||
echo "📱 Проверка подключения Android устройства..."
|
||
DEVICES=($(adb devices | grep -w "device" | awk '{print $1}'))
|
||
|
||
if [ ${#DEVICES[@]} -eq 0 ]; then
|
||
echo "⚠️ Android устройства не найдены!"
|
||
echo "Подключите устройство и включите отладку по USB"
|
||
else
|
||
echo "✅ Найдено устройств: ${#DEVICES[@]}"
|
||
for device in "${DEVICES[@]}"; do
|
||
echo " 📲 $device"
|
||
done
|
||
fi
|
||
|
||
# 5. Сборка и установка APK (если устройство подключено)
|
||
if [ ${#DEVICES[@]} -gt 0 ]; then
|
||
echo ""
|
||
echo "🔨 Сборка и установка приложения..."
|
||
|
||
# Обновляем IP адрес в Android приложении
|
||
SIGNALING_CLIENT_FILE="app/src/main/java/com/example/godeye/network/SignalingClient.kt"
|
||
if [ -f "$SIGNALING_CLIENT_FILE" ]; then
|
||
sed -i "s/192.168.1.100/${LOCAL_IP}/g" "$SIGNALING_CLIENT_FILE"
|
||
echo "🔧 IP адрес обновлен в Android приложении: $LOCAL_IP"
|
||
fi
|
||
|
||
# Собираем проект
|
||
echo "⚙️ Сборка проекта..."
|
||
./gradlew assembleDebug > logs/build.log 2>&1
|
||
|
||
if [ $? -eq 0 ]; then
|
||
echo "✅ Проект собран успешно"
|
||
|
||
# Устанавливаем на все подключенные устройства
|
||
for device in "${DEVICES[@]}"; do
|
||
echo "📲 Установка на устройство: $device"
|
||
adb -s "$device" install -r app/build/outputs/apk/debug/app-debug.apk
|
||
|
||
if [ $? -eq 0 ]; then
|
||
echo "✅ Приложение установлено на $device"
|
||
|
||
# Запускаем приложение
|
||
echo "🚀 Запуск приложения на $device"
|
||
adb -s "$device" shell am start -n com.example.godeye/.MainActivity
|
||
else
|
||
echo "❌ Ошибка установки на $device"
|
||
fi
|
||
done
|
||
else
|
||
echo "❌ Ошибка сборки проекта"
|
||
echo "Проверьте logs/build.log для подробностей"
|
||
fi
|
||
fi
|
||
|
||
# 6. Выводим информацию для подключения
|
||
echo ""
|
||
echo "🎯 Система запущена и готова к работе!"
|
||
echo "======================================"
|
||
echo ""
|
||
echo "📡 Сигналинг сервер: ws://${LOCAL_IP}:8765"
|
||
echo "🌐 Интерфейс оператора: http://${LOCAL_IP}:8080/operator-interface.html"
|
||
echo "📱 Android приложение: установлено и запущено на устройствах"
|
||
echo ""
|
||
echo "🔗 Инструкции по подключению:"
|
||
echo "1. Откройте браузер и перейдите по адресу: http://${LOCAL_IP}:8080/operator-interface.html"
|
||
echo "2. В браузере нажмите 'Подключиться к серверу'"
|
||
echo "3. На Android устройстве запустите приложение GodEye"
|
||
echo "4. В приложении нажмите 'Начать трансляцию'"
|
||
echo "5. В браузере должно появиться устройство в списке доступных"
|
||
echo "6. Нажмите на устройство для подключения"
|
||
echo ""
|
||
echo "📊 Мониторинг:"
|
||
echo "• Логи сигналинга: tail -f logs/signaling.log"
|
||
echo "• Логи веб сервера: tail -f logs/webserver.log"
|
||
echo "• Логи сборки: tail -f logs/build.log"
|
||
echo ""
|
||
echo "🛑 Для остановки нажмите Ctrl+C"
|
||
echo ""
|
||
|
||
# Основной цикл мониторинга
|
||
echo "🔄 Мониторинг системы (каждые 10 сек)..."
|
||
while true; do
|
||
sleep 10
|
||
|
||
# Проверяем состояние сервисов
|
||
SIGNALING_STATUS="❌"
|
||
WEB_STATUS="❌"
|
||
|
||
if ps -p $SIGNALING_PID > /dev/null 2>&1; then
|
||
SIGNALING_STATUS="✅"
|
||
fi
|
||
|
||
if ps -p $WEB_PID > /dev/null 2>&1; then
|
||
WEB_STATUS="✅"
|
||
fi
|
||
|
||
# Проверяем подключенные устройства
|
||
DEVICE_COUNT=$(adb devices | grep -w "device" | wc -l)
|
||
|
||
echo "$(date '+%H:%M:%S') - Статус: Сигналинг $SIGNALING_STATUS | Веб $WEB_STATUS | Устройств: $DEVICE_COUNT"
|
||
|
||
# Если какой-то сервис упал, пытаемся перезапустить
|
||
if ! ps -p $SIGNALING_PID > /dev/null 2>&1; then
|
||
echo "⚠️ Сигналинг сервер упал, перезапуск..."
|
||
python3 signaling_server.py > logs/signaling.log 2>&1 &
|
||
SIGNALING_PID=$!
|
||
fi
|
||
|
||
if ! ps -p $WEB_PID > /dev/null 2>&1; then
|
||
echo "⚠️ Веб сервер упал, перезапуск..."
|
||
python3 -m http.server 8080 > logs/webserver.log 2>&1 &
|
||
WEB_PID=$!
|
||
fi
|
||
done
|