Я создаю приложение, в котором каждый пользователь присоединяется к определенной c комнате, связанной с идентификатором, общим для других пользователей (предположим, что один администратор индивидуально подключен ко многим пользователям, но эти пользователи подключены только к этому администратору). Мне нужно сделать это автоматически, поэтому, когда они регистрируются, я выполняю автоматическое c назначение, например, при join. html:
socket.on('connect', function () {
socket.emit('connected');
});
Что вызывает это:
@socketio.on('connected')
def connected():
global user_unique_room_id
if current_user.is_authenticated:
rol = current_user.get_current_user_role()
...
if rol == 'User':
user_current_room = str(current_user.shared_id) + str(user_unique_room_id)
join_room(user_current_room)
models.User(id=current_user.id).update(
set__room = user_current_room)
user_unique_room_id += 1
Я запоминаю комнату, поэтому, когда они отправляют сообщение, они точно знают, куда его отправить:
@routes.route('/new_message', methods=["POST"])
@login_required
def new_message():
room = current_user.room
socketio.emit('new_message', data, room=room)
return jsonify(data), 202
Но это не работает. И поскольку если я сделаю это ...
socketio.emit('new_message', data, room=None)
... он фактически отправит сообщение, я чувствую, что join_room
at @socketio.on('connected')
неправильно назначает комнату и просто, вероятно, назначает ее None .
Чтобы уточнить, current_user.shared_id
это что-то вроде 5f0c30c6593bfe9ecb6fdab3
. И user_current_room
выглядит примерно так:
5f0c30c6593bfe9ecb6fdab30
5f0c30c6593bfe9ecb6fdab31
5f0c30c6593bfe9ecb6fdab32
...
5f0c30c6593bfe9ecb6fdab399
На всякий случай, моя модель User выглядит так:
{'email': 'example@example.com', 'password': example, 'username': 'example', 'shared_id':
'5f0c8f74315aa1ebe80b50a2', 'room': '5f0c8f74315aa1ebe80b50a20', 'timestamp':
datetime.datetime(2020, 7, 14, 9, 52, 17, 322000), 'active': True, 'id':
ObjectId('5f0d80511d1cbebeec44980b'), 'role': 'User'}
Я новичок в SocketIO, поэтому я Я почти уверен, что делаю что-то неправильно, но просто не знаю, что.
Заранее большое спасибо!