#!/usr/bin/env python3 """ Пример клиента для работы с Racing A* Web Service API """ import requests import json import sys import os def solve_map(api_url, map_file): """Решает карту, отправляя её на сервер""" print(f"📂 Загрузка карты из {map_file}...") if not os.path.exists(map_file): print(f"❌ Файл {map_file} не найден!") return None # Читаем карту with open(map_file, 'r') as f: map_data = json.load(f) print(f"📡 Отправка запроса на {api_url}/solve...") try: # Отправляем запрос response = requests.post( f'{api_url}/solve', json=map_data, headers={'Content-Type': 'application/json'} ) result = response.json() if result['success']: stats = result['statistics'] print(f"\n✅ Решение найдено!") print(f" Шагов: {stats['steps']}") print(f" Чекпоинтов: {stats['checkpoints']}") print(f" Время: {stats['computeTimeSeconds']:.2f}s") print(f" Макс. скорость: {stats['maxSpeed']}") print(f" Итераций: {stats['iterations']}") return result['solution'] else: print(f"\n❌ Ошибка: {result['error']}") return None except requests.exceptions.ConnectionError: print(f"\n❌ Не удалось подключиться к серверу {api_url}") print(" Убедитесь, что сервер запущен: ./run-webservice.sh") return None except Exception as e: print(f"\n❌ Ошибка: {e}") return None def save_solution(solution, output_file): """Сохраняет решение в файл""" if solution is None: return solution_data = {"solution": solution} with open(output_file, 'w') as f: json.dump(solution_data, f, indent=2) print(f"\n💾 Решение сохранено в {output_file}") def check_health(api_url): """Проверяет состояние сервера""" try: response = requests.get(f'{api_url}/health') health = response.json() print(f"🏥 Health Check:") print(f" Status: {health['status']}") print(f" Version: {health['version']}") print(f" Timestamp: {health['timestamp']}") return health['status'] == 'healthy' except: return False def main(): """Главная функция""" api_url = os.getenv('API_URL', 'http://localhost:5000') print("╔════════════════════════════════════════════════════════════╗") print("║ Racing A* Solver - Python Client Example ║") print("╚════════════════════════════════════════════════════════════╝\n") # Проверяем аргументы if len(sys.argv) < 2: print("Использование:") print(f" {sys.argv[0]} [output-file.json]") print(f"\nПример:") print(f" {sys.argv[0]} maps/simple-test.json solution.json") sys.exit(1) map_file = sys.argv[1] output_file = sys.argv[2] if len(sys.argv) > 2 else 'solution.json' print(f"🌐 API URL: {api_url}\n") # Проверяем здоровье сервера if not check_health(api_url): print("\n❌ Сервер недоступен!") sys.exit(1) print() # Решаем карту solution = solve_map(api_url, map_file) # Сохраняем решение if solution: save_solution(solution, output_file) print("\n✅ Готово!") else: print("\n❌ Не удалось получить решение") sys.exit(1) if __name__ == '__main__': main()