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'self.room_group_name = {self.room_group_name}') print(f'self.channel_name = {self.channel_name}') self.accept() def ws_send_msg(self, msg_type, group_name, msg): msgDict = { 'type': msg_type, 'message': msg, # 'sender': resDict['sender'] } async_to_sync(self.channel_layer.group_send)( group_name, msgDict ) def receive(self, text_data): print(f'ws receive text_data = {text_data}') data = json.loads(text_data) from .funcs import send_msg Dict = send_msg(text_data) group_name = f'user_{data["receiver"]}' resDict = { 'type': 'echo', 'message': f'group = {group_name}', # 'sender': resDict['sender'] } async_to_sync(self.channel_layer.group_send)( group_name, resDict ) resDict = { 'type': 'echo', 'message': Dict, # 'sender': resDict['sender'] } group_name = f'user_{data["sender"]}' 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 ws_send_msg(self, data): print('ws ws_send_msg') data['type'] = 'chat' self.send(text_data=json.dumps(data))