login fix, lobby fix
This commit is contained in:
65
app.py
65
app.py
@@ -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')
|
||||
|
||||
Reference in New Issue
Block a user