a
    P\c                     @   sh   d dl Z d dlmZmZ d dlmZ d dlmZ ddlm	Z	 d dl
mZ d dlmZ G d	d
 d
eZdS )    N)AsyncWebsocketConsumerWebsocketConsumer)get_user_model)database_sync_to_async   )Chat)User)async_to_syncc                   @   sD   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dS )ChatConsumerc                 C   s   | j d d d | _| j d d d | _| | j| _td| j | | j| _td| j d| j d| j | _t| j	j
| j| j |   | jtd	d
dd d S )N	url_routekwargs	sender_idreceiver_idsenderreceiverchat__Zconnection_establishedzYou are now connected!)typemessage	text_data)scoper   r   get_userr   printr   chat_room_namer	   channel_layer	group_addchannel_nameacceptsendjsondumpsself r$   )/var/www/html/Beni/beni/chat/consumers.pyconnect   s     
zChatConsumer.connectc                 C   s   t | jj| j| j d S )N)r	   r   group_discardr   r   )r#   
close_coder$   r$   r%   
disconnect    s    
zChatConsumer.disconnectc              
   C   sZ   t |}|d }t| | t| jj| jd|| jj| j	jt
tjdjd d S )Nr   chat_message
created_at)r   r   r   r   r+   )r    loadsr	   create_messager   
group_sendr   r   idr   strr   objectslatestr+   )r#   r   Ztext_data_jsonr   r$   r$   r%   receive&   s    

zChatConsumer.receivec                 C   s6   |d }|d }|d }| j t|||dd d S )Nr   r   r+   )r   r   r+   r   )r   r    r!   )r#   eventr   r   r+   r$   r$   r%   r*   =   s    zChatConsumer.chat_messagec                 C   s0   zt jj|d}|W S  t jy*   Y d S 0 d S )N)r/   )r   r1   getDoesNotExist)r#   user_iduserr$   r$   r%   r   K   s
    zChatConsumer.get_userc                 C   s   t jj| j| j|d}d S )N)r   r   r   )r   r1   creater   r   )r#   r   chatr$   r$   r%   r-   R   s    zChatConsumer.create_messagec                 C   s$   dt | j| j dt| j| j S )Nr   r   )minr   r   maxr"   r$   r$   r%   get_chat_roomZ   s    zChatConsumer.get_chat_roomN)
__name__
__module____qualname__r&   r)   r3   r*   r   r-   r=   r$   r$   r$   r%   r
      s   r
   )r    Zchannels.generic.websocketr   r   django.contrib.authr   channels.dbr   modelsr   Zauth_apis.modelsr   asgiref.syncr	   r
   r$   r$   r$   r%   <module>   s   