#!/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