from fastapi import HTTPException from datetime import datetime import json from app.services.coins import CoinsService from app.models.server.event import PlayerEvent, OnlinePlayersUpdate class EventService: def __init__(self): self.coins_service = CoinsService() async def process_event(self, event_data: dict): try: event_type = event_data.get("event_type") server_ip = event_data.get("server_ip", "unknown") if event_type == "player_join": player_name = event_data["player_name"] player_id = event_data["player_id"] print(f"[{datetime.now()}] Игрок вошел: {player_name} (ID: {player_id}) " f"IP сервера: {server_ip}") elif event_type == "player_quit": player_name = event_data["player_name"] player_id = event_data["player_id"] print(f"[{datetime.now()}] Игрок вышел: {player_name} (ID: {player_id}) " f"IP сервера: {server_ip}") elif event_type == "player_session": player_name = event_data["player_name"] player_id = event_data["player_id"] duration = event_data["duration"] # Обновляем монеты через выделенный сервис await self.coins_service.update_player_coins(player_id, player_name, duration, server_ip) print(f"[{datetime.now()}] Игрок {player_name} провел на сервере: {duration} секунд " f"IP сервера: {server_ip}") elif event_type == "online_players_update": players = event_data["players"] print(f"\n[{datetime.now()}] Текущие онлайн-игроки ({len(players)}): " f"IP сервера: {server_ip}") # Обрабатываем каждого игрока for player in players: player_id = player["player_id"] player_name = player["player_name"] online_time = player["online_time"] # Обновляем монеты через выделенный сервис await self.coins_service.update_player_coins( player_id, player_name, online_time, server_ip ) hours, remainder = divmod(online_time, 3600) minutes, seconds = divmod(remainder, 60) print(f" - {player_name} (ID: {player_id}) " f"Онлайн: {hours}ч {minutes}м {seconds}с") print() else: print(f"[{datetime.now()}] Неизвестное событие: {json.dumps(event_data, indent=2)}") raise HTTPException(status_code=400, detail="Invalid event type") return {"status": "success", "message": "Event processed"} except Exception as e: print(f"[{datetime.now()}] Ошибка обработки события: {str(e)}") print(f"Полученные данные: {json.dumps(event_data, indent=2)}") raise HTTPException(status_code=400, detail=str(e))