import json from channels.generic.websocket import WebsocketConsumer, AsyncWebsocketConsumer, JsonWebsocketConsumer from asgiref.sync import async_to_sync, sync_to_async # from channels.auth import channel_session_user, channel_session_user_from_http from channels.layers import get_channel_layer class ChatConsumer(WebsocketConsumer): # def __init__(self, *args, **kwargs): # super().__init__(args, kwargs) # self.room_name = None def connect(self): print('ws connect') self.room_group_name = 'test' async_to_sync(self.channel_layer.group_add)( f'user_{self.scope["user"].id}', self.channel_name ) print(f'created group user_{self.scope["user"].id}') if self.scope['user'].is_staff: async_to_sync(self.channel_layer.group_add)( f'support_managers', self.channel_name ) print(f'add user {self.scope["user"].id} to group support_managers') self.accept() def receive(self, text_data): print(f'ws receive text_data = {text_data}') data = json.loads(text_data) sender = data['sender'] receiver = data['receiver'] from .funcs import send_msg, update_chat data.update({ 'cur_user': sender, 'required_beep': False, }) send_msg(data) Dict = update_chat(data) group_name = f'user_{sender}' resDict = { 'type': 'update_chat', 'sender': sender, 'receiver': receiver, 'group_name': group_name, } resDict.update(Dict) async_to_sync(self.channel_layer.group_send)( group_name, resDict ) group_name = f'user_{receiver}' if group_name in self.channel_layer.groups.keys(): data.update({ 'cur_user': receiver, 'required_beep': True, }) Dict = update_chat(data) resDict = { 'type': 'update_chat', 'sender': receiver, 'receiver': sender, 'group_name': group_name, } resDict.update(Dict) async_to_sync(self.channel_layer.group_send)( group_name, resDict ) def echo(self, data): print('ws echo') self.send(text_data=json.dumps(data)) def update_chat(self, data): print(f'ws update_chat {data["group_name"]}') self.send(text_data=json.dumps(data)) def ws_send_msg(self, data): print('ws ws_send_msg') self.send(text_data=json.dumps(data))