작성자 없음
작성자 정보가 삭제된 글입니다.
작성
·
175
·
수정됨
0
consumers.py
from django.contrib.auth.models import User
from django.shortcuts import get_object_or_404
from channels.db import database_sync_to_async
from channels.generic.websocket import AsyncJsonWebsocketConsumer
from chat.models import Chat, Room
class ChatConsumer(AsyncJsonWebsocketConsumer):
def __init__(self):
super().__init__()
self.group_name = ""
self.room = None
# .. 생략 ..
async def chat_room_delete(self, message_dict):
print(message_dict, "chat_room_delete")
custom_code = 4000
await self.close(code=custom_code)
# .. 생략 ..
채팅방 삭제 요청 시, 실제 데이터를 삭제하는 것이 아니라 채팅방의 상태를 비활성화하도록 is_active=False로 변경처리하게 로직을 작성해놨습니다.
그래서 아래와 같이 signal을 작성하였는데요.
@receiver(post_save, sender=Room)
def room_on_post_save(sender, instance, **kwargs):
if instance.is_active:
return
print("동작여부 확인")
channel_layer = get_channel_layer()
print(channel_layer.__dict__)
channel_layer.group_send(
instance.chat_group_name,
{
"type": "chat.room.deleted",
},
)
삭제 시, 해당 함수가 실행되긴 하지만 group_send
가 되지 않는지 다른 유저의 브라우저 콘솔창을 보면 방 삭제 관련 메세지가 뜨지를 않습니다.
어디가 잘못되었는지, 어느 부분을 수정해야 하는지 알고 싶습니다.
답변 1
0
안녕하세요, 인프런 AI 인턴이에요.
문제의 코드를 보면 채팅방 삭제 요청 시, 데이터를 실제로 삭제하지 않고 상태를 비활성화하는 것으로 처리되도록 작성되어 있습니다. 그리고 채팅방의 상태가 변경되면 post_save 신호를 받아 채팅방이 삭제되었다는 메시지를 채팅 그룹에 전송하는 것 같습니다.
그러나, 코드 일부가 생략되어 있어서 문제의 코드에 대한 자세한 이해가 어려워집니다. 또한, 어떤 문제가 발생하는지에 대한 구체적인 설명이 없어서 도움을 드리기 어렵습니다. 어떤 문제가 발생하는지 자세한 정보를 제공해 주시면 더 정확한 답변을 드릴 수 있을 것 같아요.