From 48da2b28484c18c311761acd3e33ee94ba71beb1 Mon Sep 17 00:00:00 2001 From: SDE Date: Fri, 18 Aug 2023 15:49:20 +0300 Subject: [PATCH] 0.3.30 support chat v3 --- ChatServiceApp/websocket_views.py | 103 +++++++++++++++++++----------- TWB/asgi.py | 2 +- 2 files changed, 65 insertions(+), 40 deletions(-) diff --git a/ChatServiceApp/websocket_views.py b/ChatServiceApp/websocket_views.py index ed25ad4..4a95734 100644 --- a/ChatServiceApp/websocket_views.py +++ b/ChatServiceApp/websocket_views.py @@ -72,14 +72,39 @@ class ChatConsumer(WebsocketConsumer): # super().__init__(args, kwargs) # self.room_name = None + def disconnect(self, close_code): + print("Closed websocket with code: ", close_code) + + for gr in self.groups: + async_to_sync(self.channel_layer.group_discard)( + gr, + self.channel_name + ) + self.close() + def connect(self): print('ws connect') - 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}') + user_group = f'user_{self.scope["user"].id}' + + add_to_group = False + if not self.groups or not user_group in self.groups or not self.channel_name in self.groups[user_group]: + add_to_group = True + + if add_to_group: + if not self.groups: + self.groups = {user_group: [self.channel_name]} + elif not user_group in self.groups: + self.groups[user_group].append(self.channel_name) + else: + self.groups.update({user_group: [self.channel_name]}) + + async_to_sync(self.channel_layer.group_add)( + user_group, + 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)( @@ -160,40 +185,40 @@ class ChatConsumer(WebsocketConsumer): resDict ) - group_name = f'user_{receiver}' - # if group_name in self.channel_layer.groups.keys(): - data.update({ - 'cur_user': receiver, - 'required_beep': True, - }) - Dict = get_update_chat_Dict(data) - - if 'support_chat_html' in Dict: - msg_type = 'update_support_chat' - else: - msg_type = 'update_chat' - - resDict = { - 'type': msg_type, - 'sender': receiver, - 'receiver': sender, - 'group_name': group_name, - } - - if ticket: - tickets_wo_manager_html = get_tickets_wo_manager_html(ticket, receiver_obj, data) - if tickets_wo_manager_html: - resDict.update({'tickets_wo_manager_html': tickets_wo_manager_html}) - - tickets_w_manager_html = get_tickets_w_manager_html(ticket, receiver_obj, data) - if tickets_w_manager_html: - resDict.update({'tickets_w_manager_html': tickets_w_manager_html}) - - 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 = get_update_chat_Dict(data) + # + # if 'support_chat_html' in Dict: + # msg_type = 'update_support_chat' + # else: + # msg_type = 'update_chat' + # + # resDict = { + # 'type': msg_type, + # 'sender': receiver, + # 'receiver': sender, + # 'group_name': group_name, + # } + # + # if ticket: + # tickets_wo_manager_html = get_tickets_wo_manager_html(ticket, receiver_obj, data) + # if tickets_wo_manager_html: + # resDict.update({'tickets_wo_manager_html': tickets_wo_manager_html}) + # + # tickets_w_manager_html = get_tickets_w_manager_html(ticket, receiver_obj, data) + # if tickets_w_manager_html: + # resDict.update({'tickets_w_manager_html': tickets_w_manager_html}) + # + # resDict.update(Dict) + # async_to_sync(self.channel_layer.group_send)( + # group_name, + # resDict + # ) diff --git a/TWB/asgi.py b/TWB/asgi.py index 436f4f6..ad656f2 100644 --- a/TWB/asgi.py +++ b/TWB/asgi.py @@ -11,7 +11,7 @@ import os from django.core.asgi import get_asgi_application from channels.routing import ProtocolTypeRouter, URLRouter -# from channels.auth import AuthMiddlewareStack +from channels.auth import AuthMiddlewareStack from ChatServiceApp.websocket_urls import websocket_urlpatterns from channels.security.websocket import AllowedHostsOriginValidator from channels.sessions import SessionMiddlewareStack