feat: new endpoints for users and updated models
This commit is contained in:
70
app/services/server/event.py
Normal file
70
app/services/server/event.py
Normal file
@ -0,0 +1,70 @@
|
||||
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))
|
Reference in New Issue
Block a user