login fix, lobby fix

This commit is contained in:
2026-02-03 00:16:30 +03:00
parent 038b307d70
commit 73b20c2c54
3 changed files with 217 additions and 15 deletions

65
app.py
View File

@@ -833,6 +833,44 @@ def reset_room(room_code):
return jsonify({'success': True})
@app.route('/api/room/<room_code>/players')
@login_required
def get_room_players(room_code):
"""Получение списка игроков комнаты без перезагрузки страницы"""
room = GameRoom.query.filter_by(code=room_code).first_or_404()
# Проверяем, состоит ли пользователь в комнате
current_player = GamePlayer.query.filter_by(
user_id=current_user.id,
room_id=room.id
).first()
if not current_player:
return jsonify({'error': 'Вы не в этой комнате'}), 403
# Получаем всех игроков
players = GamePlayer.query.filter_by(room_id=room.id).all()
players_data = []
for player in players:
user = User.query.get(player.user_id)
players_data.append({
'user_id': player.user_id,
'username': user.username if user else 'Игрок',
'is_admin': player.is_admin,
'is_ready': player.is_ready,
'capital': player.capital,
'ability_name': get_ability_name(player.ability),
'ability_description': get_ability_description(player.ability)
})
return jsonify({
'success': True,
'players': players_data,
'room_status': room.status
})
@app.route('/room/<room_code>/delete', methods=['POST'])
@login_required
def delete_room(room_code):
@@ -952,16 +990,29 @@ def handle_connect():
@socketio.on('join_room')
def handle_join_room(data):
room_code = data.get('room')
if room_code:
if room_code and current_user.is_authenticated:
join_room(room_code)
logger.info(f'User {current_user.username} joined room {room_code}')
# Отправляем уведомление другим игрокам
emit('player_joined', {
'user_id': current_user.id,
'username': current_user.username,
'timestamp': datetime.utcnow().isoformat()
}, room=room_code, include_self=False)
# Проверяем, было ли уже уведомление о входе
session_key = f'has_notified_join_{room_code}'
if not session.get(session_key):
# Отправляем уведомление другим игрокам
emit('player_joined', {
'user_id': current_user.id,
'username': current_user.username,
'timestamp': datetime.utcnow().isoformat(),
'is_reconnect': False
}, room=room_code, include_self=False)
# Отмечаем в сессии, что уведомление отправлено
session[session_key] = True
else:
# Это реконнект, отправляем тихое обновление
emit('player_reconnected', {
'user_id': current_user.id,
'username': current_user.username
}, room=room_code, include_self=False)
@socketio.on('leave_room')