support chat v3
This commit is contained in:
SDE
2023-08-18 15:49:20 +03:00
parent 80a87fb8e7
commit 48da2b2848
2 changed files with 65 additions and 40 deletions

View File

@@ -72,14 +72,39 @@ class ChatConsumer(WebsocketConsumer):
# super().__init__(args, kwargs) # super().__init__(args, kwargs)
# self.room_name = None # 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): def connect(self):
print('ws connect') print('ws connect')
async_to_sync(self.channel_layer.group_add)( user_group = f'user_{self.scope["user"].id}'
f'user_{self.scope["user"].id}',
self.channel_name 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]:
print(f'created group user_{self.scope["user"].id}') 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: if self.scope['user'].is_staff:
async_to_sync(self.channel_layer.group_add)( async_to_sync(self.channel_layer.group_add)(
@@ -160,40 +185,40 @@ class ChatConsumer(WebsocketConsumer):
resDict resDict
) )
group_name = f'user_{receiver}' # group_name = f'user_{receiver}'
# if group_name in self.channel_layer.groups.keys(): # # if group_name in self.channel_layer.groups.keys():
data.update({ # data.update({
'cur_user': receiver, # 'cur_user': receiver,
'required_beep': True, # 'required_beep': True,
}) # })
Dict = get_update_chat_Dict(data) # Dict = get_update_chat_Dict(data)
#
if 'support_chat_html' in Dict: # if 'support_chat_html' in Dict:
msg_type = 'update_support_chat' # msg_type = 'update_support_chat'
else: # else:
msg_type = 'update_chat' # msg_type = 'update_chat'
#
resDict = { # resDict = {
'type': msg_type, # 'type': msg_type,
'sender': receiver, # 'sender': receiver,
'receiver': sender, # 'receiver': sender,
'group_name': group_name, # 'group_name': group_name,
} # }
#
if ticket: # if ticket:
tickets_wo_manager_html = get_tickets_wo_manager_html(ticket, receiver_obj, data) # tickets_wo_manager_html = get_tickets_wo_manager_html(ticket, receiver_obj, data)
if tickets_wo_manager_html: # if tickets_wo_manager_html:
resDict.update({'tickets_wo_manager_html': 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) # tickets_w_manager_html = get_tickets_w_manager_html(ticket, receiver_obj, data)
if tickets_w_manager_html: # if tickets_w_manager_html:
resDict.update({'tickets_w_manager_html': tickets_w_manager_html}) # resDict.update({'tickets_w_manager_html': tickets_w_manager_html})
#
resDict.update(Dict) # resDict.update(Dict)
async_to_sync(self.channel_layer.group_send)( # async_to_sync(self.channel_layer.group_send)(
group_name, # group_name,
resDict # resDict
) # )

View File

@@ -11,7 +11,7 @@ import os
from django.core.asgi import get_asgi_application from django.core.asgi import get_asgi_application
from channels.routing import ProtocolTypeRouter, URLRouter from channels.routing import ProtocolTypeRouter, URLRouter
# from channels.auth import AuthMiddlewareStack from channels.auth import AuthMiddlewareStack
from ChatServiceApp.websocket_urls import websocket_urlpatterns from ChatServiceApp.websocket_urls import websocket_urlpatterns
from channels.security.websocket import AllowedHostsOriginValidator from channels.security.websocket import AllowedHostsOriginValidator
from channels.sessions import SessionMiddlewareStack from channels.sessions import SessionMiddlewareStack