Как отправить имя комнаты в функции подключения в каналах 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
Другие вопросы по тегам