a
    њh                     @  s  d dl mZ d dlZd dlZd dlZd dlZd dlm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 dgZdddddZdddddZG dd dejZdddddZddddddZdddddZd#d dd!d"dZdS )$    )annotationsN)	Generator   )ClientConnectionconnect)SimpleQueue)ConnectionClosed)Close)StreamReader)versionmainstrNone)stringreturnc                 C  s"   t jd|  d t j  d S )Nz	7
[A[Lz
8[Bsysstdoutwriteflushr    r   I/wd/webapps/venvs/v2025_4um/lib/python3.9/site-packages/websockets/cli.pyprint_during_input   s    r   c                 C  s"   t jd|  d t j  d S )Nz[K
r   r   r   r   r   print_over_input(   s    r   c                   @  sf   e Zd ZddddZddddZddd	d
dZdddddZddddZdddddZdS )	ReadLinesr   )r   c                 C  s   t  | _t | _d S N)r
   readerr   messagesselfr   r   r   __init__5   s    zReadLines.__init__zGenerator[None, None, None]c                 c  sF   t jd t j  | jt jE d H }| j|	 
d q d S )Nz> z
)r   r   r   r   r   Z	read_linemaxsizer   putdecoderstrip)r!   liner   r   r   parse9   s    
zReadLines.parsezasyncio.BaseTransport)	transportr   c                 C  s   |   | _t| j d S r   )r(   parsernext)r!   r)   r   r   r   connection_made@   s    
zReadLines.connection_madebytes)datar   c                 C  s   | j | t| j d S r   )r   Z	feed_datar+   r*   )r!   r.   r   r   r   data_receivedD   s    zReadLines.data_receivedc                 C  s   | j   d S r   )r   Zfeed_eofr    r   r   r   eof_receivedH   s    zReadLines.eof_receivedzException | None)excr   c                 C  s   | j   | j  d S r   )r   discardr   abort)r!   r1   r   r   r   connection_lostL   s    
zReadLines.connection_lostN)	__name__
__module____qualname__r"   r(   r,   r/   r0   r4   r   r   r   r   r   4   s   r   r   )	websocketr   c                   s@   | 2 z43 d H W }t |tr(td|  qtd|   q6 d S )Nz< z< (binary) )
isinstancer   r   hex)r8   messager   r   r   print_incoming_messagesQ   s    
r<   zSimpleQueue[str])r8   r   r   c                   s\   z|  I d H }W n ty(   Y qXY n0 z| |I d H  W q  tyT   Y qXY q 0 q d S r   )getEOFErrorsendr   )r8   r   r;   r   r   r   send_outgoing_messagesY   s    
r@   )urir   c           	   
     s`  zt | I d H }W nD tyV } z,td|  d| d td W Y d }~nd }~0 0 td|  d t }|ttj	I d H \}}t
t|}t
t||j}zPztj||gtjdI d H  W n tjy   Y n0 W |  |  |  n|  |  |  0 | I d H  |jd ur:|jd us>J t|j|j}td| d d S )NzFailed to connect to z: .r   zConnected to )Zreturn_whenzConnection closed: )r   	Exceptionprintr   exitasyncioZget_running_loopZconnect_read_piper   stdinZcreate_taskr<   r@   r   waitZFIRST_COMPLETEDZCancelledErrorcancelcloseZ
close_codeZclose_reasonr	   r   )	rA   r8   r1   loopr)   protocolincomingoutgoingZclose_statusr   r   r   interactive_clienth   s>     



rO   zlist[str] | None)argvr   c                 C  s   t jdddd}| }|jddd |jdd	d
d || }|jrXtdt  d S |jd u rt|	  t
d t
jdkrtd zdd l}W n ty   Y n0 ztt|j W n ty   Y n0 d S )NZ
websocketszInteractive WebSocket client.F)progdescriptionadd_helpz	--version
store_true)actionrA   z<uri>?)metavarnargszwebsockets    win32 r   )argparseArgumentParseradd_mutually_exclusive_groupadd_argument
parse_argsr   rD   websockets_versionrA   print_usager   rE   platformossystemreadlineImportErrorrF   runrO   KeyboardInterrupt)rP   r*   groupargsrf   r   r   r   r      s2    




)N)
__future__r   r\   rF   rd   r   typingr   Zasyncio.clientr   r   Zasyncio.messagesr   
exceptionsr   framesr	   streamsr
   r   ra   __all__r   r   Protocolr   r<   r@   rO   r   r   r   r   r   <module>   s&   )