Как отправить имя комнаты в функции подключения в каналах Django
У меня есть несколько комнат в моих программах. Каждый пользователь может подключиться к этим комнатам и отправлять сообщения. для каждой комнаты у меня есть группа. Я хочу указать имя комнаты для этой группы в функции подключения. но я не знаю, как отправить имя комнаты в функции подключения.
@channel_session_user_from_http
def chat_connect(message):
message.reply_channel.send({'accept': True})
@touch_presence
@channel_session_user
def chat_receive(message):
data = json.loads(message['text'])
myRoom = data['room']
messageChat = data['messagechat']
if not message.user.is_authenticated():
return
Group(myRoom).add(message.reply_channel)
Room_channels_presence.objects.add(myRoom, message.reply_channel.name, message.user)
message.channel_session['room'] = myRoom
#store in db
try:
room = Room.objects.get(slug=myRoom)
message_model = Message(
user = message.user,
room = room,
text = messageChat
)
message_model.save()
except:
pass
my_dict = {
'user': message.user.username,
'messagechat': messageChat
}
Group(myRoom).send({'text': json.dumps(my_dict)})
1 ответ
Для того, чтобы отправить имя комнаты. Я использовал, чтобы открыть функцию в файле JS. Когда мы впервые подключаемся к комнате, мы запускаем функцию onopen для websocket. мы можем отправить наш текст в теле функции onopen. как это:
chatsock.onopen = function() {
//in order to set room' name
var message = {
messagechat: "",
room: roomSlug
}
chatsock.send(JSON.stringify(message));
}
затем мы можем получить этот текст в функции receive на consumer.py:
def chat_receive(message):
data = json.loads(message['text'])
myRoom = data['room']
messageChat = data['messagechat']
if not message.user.is_authenticated():
return
Group(myRoom).add(message.reply_channel)
Room_channels_presence.objects.add(myRoom, message.reply_channel.name, message.user)
message.channel_session['room'] = myRoom
#if seding message came from onopen function in realtime.js
#we just want to create a session for room's name
if not messageChat:
print('notttttttttt')
return