44 lines
2.0 KiB
Python
44 lines
2.0 KiB
Python
"""2"""
|
|||
|
|
|
||
|
|
import pydash
|
||
|
|
from asgiref.sync import async_to_sync
|
||
|
|
|
||
|
|
from sixGuoDjango import RedisClientManager
|
||
|
|
|
||
|
|
redia_socket_5 = RedisClientManager().get_client(db_name="redis_5")
|
||
|
|
"""consumers"""
|
||
|
|
|
||
|
|
import orjson
|
||
|
|
from channels.generic.websocket import WebsocketConsumer
|
||
|
|
|
||
|
|
|
||
|
|
class ChatConsumer(WebsocketConsumer):
|
||
|
|
def connect(self):
|
||
|
|
print("连接请求进来了", self.channel_name)
|
||
|
|
room_id = pydash.get(obj=self.scope, path="url_route.kwargs.room_id")
|
||
|
|
self.accept() # 接受连接
|
||
|
|
redia_socket_5.set(name=room_id, value=self.channel_name)
|
||
|
|
# self.channel_layer.group_add(group="demo_name", channel=self.channel_name)
|
||
|
|
async_to_sync(self.channel_layer.group_add)(group="demo_name", channel=self.channel_name)
|
||
|
|
async_to_sync(self.channel_layer.group_add)(group="demo_xiaozizi", channel=self.channel_name)
|
||
|
|
|
||
|
|
def receive(self, text_data=None, bytes_data=None):
|
||
|
|
# text_data 已经是字符串,直接使用
|
||
|
|
if text_data == "ping":
|
||
|
|
self.send(text_data=orjson.dumps({"type": "监听心跳", "text": {"xiao": "xiaozizi"}},
|
||
|
|
option=orjson.OPT_SORT_KEYS).decode(encoding="utf-8"))
|
||
|
|
else:
|
||
|
|
# 处理其他消息
|
||
|
|
# print("判断生成了哟", text_data)
|
||
|
|
self.send(text_data=orjson.dumps({"type": "chat_msg", "text": {"xiao": "xiaozizi"}},
|
||
|
|
option=orjson.OPT_SORT_KEYS).decode(encoding="utf-8"))
|
||
|
|
|
||
|
|
def disconnect(self, code):
|
||
|
|
room_id = pydash.get(obj=self.scope, path="url_route.kwargs.room_id") # 断开连接后可以拿到参数
|
||
|
|
print("连接断开,code:", code, room_id)
|
||
|
|
async_to_sync(self.channel_layer.group_discard)(group="demo_name", channel=self.channel_name)
|
||
|
|
async_to_sync(self.channel_layer.group_discard)(group="demo_xiaozizi", channel=self.channel_name)
|
||
|
|
|
||
|
|
def update_更新用户头像(self, event):
|
||
|
|
self.send(text_data=orjson.dumps(event, option=orjson.OPT_SORT_KEYS).decode(encoding="utf-8"))
|