2017-11-26 13 views
0

내 프로그램에 여러 개의 방이 있습니다. 각 사용자는이 회의실에 연결하여 메시지를 보낼 수 있습니다. 각 방마다 그룹이 있습니다. 연결 기능에서이 그룹의 회의실 이름을 지정하고 싶습니다. 하지만 연결 함수에서 방 이름을 보내는 방법을 모르겠습니다.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)}) 

답변

0

방의 이름을 보내기 위해서. 나는 js 파일에서 onopen 함수를 사용했다. 처음으로 방에 연결했을 때, 사실 우리는 websocket에 대해 onopen 함수를 실행합니다. 우리는 onopen 함수 본문에 텍스트를 보낼 수 있습니다. 같은 : 다음

chatsock.onopen = function() {    
    //in order to set room' name 
    var message = { 
     messagechat: "", 
     room: roomSlug 
    }  
    chatsock.send(JSON.stringify(message)); 
} 

, 우리는이 텍스트를받을 수 있습니다 consumers.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