o
    NK&h/	                     @   sR   d dl mZmZ d dlmZmZmZmZ d dlm	Z	 ee
ef ZG dd dZdS )    )	AwaitableMutableMapping)AnyCallableOptionalUnion)InvalidUsagec                	   @   s   e Zd ZdZ	ddeeged f deg ee f deee	  ddfddZ
d	ee	ef ddfd
dZdeee	ef  fddZeZddeee	  ddfddZddede	ddfddZedd Zejddeee	  fddZdS )WebSocketConnectionz
    This is for ASGI Connections.
    It provides an interface similar to WebsocketProtocol, but
    sends/receives over an ASGI connection.
    Nsendreceivesubprotocolsreturnc                 C   s   || _ || _|p	g | _d S N)_send_receive_subprotocols)selfr
   r   r    r   U/var/www/html/venv/lib/python3.10/site-packages/sanic/server/websockets/connection.py__init__   s   zWebSocketConnection.__init__datac                    sJ   ddi}t |tr|d|i n	|dt|i | |I d H  d S )Ntypezwebsocket.sendbytestext)
isinstancer   updatestrr   )r   r   argskwargsmessager   r   r   r
   #   s   
zWebSocketConnection.sendc                    sn   |   I d H }|d dkr.z|d W S  ty-   z|d W  Y S  ty,   tdw w |d dkr5	 d S )Nr   zwebsocket.receiver   r   zBad ASGI message receivedzwebsocket.disconnect)r   KeyErrorr   )r   r   r   r   r   r   r   recv-   s   
zWebSocketConnection.recvc                    s@   d }|r|D ]}|| j v r|} nq| d|dI d H  d S )Nzwebsocket.accept)r   subprotocol)r   r   )r   r   r"   subpr   r   r   accept?   s   
zWebSocketConnection.accept   codereasonc                    s   d S r   r   )r   r'   r(   r   r   r   closeN   s   zWebSocketConnection.closec                 C   s   | j S r   r   )r   r   r   r   r   Q   s   z WebSocketConnection.subprotocolsc                 C   s   |pg | _ d S r   r*   )r   r   r   r   r   r   U   s   r   )r%   r&   )__name__
__module____qualname____doc__r   ASGIMessager   r   listr   r   r   r   r
   r!   r   r$   intr)   propertyr   setterr   r   r   r   r	      s*    




r	   N)collections.abcr   r   typingr   r   r   r   sanic.exceptionsr   r   r/   r	   r   r   r   r   <module>   s
    