U
    g                     @  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Zzd dlZW n ek
rT   Y nX ddl	m
Z
mZ ddlmZ ejdkrddd	d
ZdddddZdddddZddddddZddddZedkre  dS )    )annotationsN   )ClientConnectionconnect)versionwin32None)returnc                  C  s   ddl } | d}| d}d}| jj|}||kr>td|  }| jj|| |dkrhtdt	|t
j}| ||B }| jj||dkrtddS )	z
        Enable VT-100 for console output on Windows.

        See also https://github.com/python/cpython/issues/73245.

        r   Ni   zunable to obtain stdout handlez$unable to query current console modezunable to set console mode)ctypesc_uintwindllkernel32ZGetStdHandleRuntimeErrorZGetConsoleModebyrefint
from_bytessys	byteorderZSetConsoleMode)r   ZSTD_OUTPUT_HANDLEZINVALID_HANDLE_VALUEZ"ENABLE_VIRTUAL_TERMINAL_PROCESSINGhandleZcur_modeZpy_int_modeZnew_mode r   7/tmp/pip-unpacked-wheel-dx_q7dq3/websockets/__main__.pywin_enable_vt100   s    

r   str)stringr	   c                 C  s"   t jd|  d t j  d S )Nz	7
[A[Lz
8[Br   stdoutwriteflushr   r   r   r   print_during_input3   s    
r!   c                 C  s"   t jd|  d t j  d S )Nz[K
r   r    r   r   r   print_over_inputG   s    
r#   r   zthreading.Event)	websocketstopr	   c                 C  sf   | D ],}t |tr td|  qtd|   q| sbtjdkrLtj}ntj	}t
t
 | d S )Nz< z< (binary) r   )
isinstancer   r!   hexis_setr   platformsignalZCTRL_C_EVENTSIGINToskillgetpid)r$   r%   messageZctrl_cr   r   r   print_incoming_messagesS   s    

r0   c               
   C  s  t jdddd} |  }|jddd |jdd	d
d |  }|jrVtdt  d S |jd krj| 	d t
jdkrz
t  W n@ tk
r } z"t
jd| d t
j  W 5 d }~X Y nX zt|j}W nF tk
r } z&td|j d| d t
d W 5 d }~X Y nX td|j d t }tjt||fd}|  ztd}|| qLW n2 ttfk
r   |  |  td Y nX |   d S )Nzpython -m websocketszInteractive WebSocket client.F)progdescriptionadd_helpz	--version
store_true)actionuriz<uri>?)metavarnargszwebsockets z+the following arguments are required: <uri>r   zUnable to set terminal to VT100 mode. This is only supported since Win10 anniversary update. Expect weird symbols on the terminal.
Error: r"   zFailed to connect to z: .r   zConnected to )targetargsz> zConnection closed.)!argparseArgumentParseradd_mutually_exclusive_groupadd_argument
parse_argsr   printwebsockets_versionr6   errorr   r)   r   r   stderrr   r   r   	Exceptionexit	threadingEventThreadr0   startinputsendKeyboardInterruptEOFErrorsetcloser#   join)parsergroupr<   excr$   r%   threadr/   r   r   r   mainc   sN    




rW   __main__)
__future__r   r=   r,   r*   r   rH   readlineImportErrorZsync.clientr   r   r   rC   r)   r   r!   r#   r0   rW   __name__r   r   r   r   <module>   s&   
;