
    =XcW                       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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 ej&                  d	k(  rdd
Z	 	 	 	 	 	 ddZddZddZ	 	 	 	 	 	 	 	 	 	 ddZddZedk(  r e        yy)    )annotationsN)AnySet   )ConnectionClosed)Close)connect)versionwin32c                 <   ddl } | j                  d      }| j                  d      }d}| j                  j                  j	                  |      }||k(  rt        d      | j                         }| j                  j                  j                  || j                  |            dk(  rt        d      t        j                  |t        j                        }| j                  ||z        }| j                  j                  j                  ||      dk(  rt        d      y)	zu
        Enable VT-100 for console output on Windows.

        See also https://bugs.python.org/issue29059.

        r   Ni   zunable to obtain stdout handlez$unable to query current console modezunable to set console mode)ctypesc_uintwindllkernel32GetStdHandleRuntimeErrorGetConsoleModebyrefint
from_bytessys	byteorderSetConsoleMode)r   STD_OUTPUT_HANDLEINVALID_HANDLE_VALUE"ENABLE_VIRTUAL_TERMINAL_PROCESSINGhandlecur_modepy_int_modenew_modes           5/usr/lib/python3/dist-packages/websockets/__main__.pywin_enable_vt100r$      s     	"MM#.%}}R0-2*''445FG))?@@==?==!!00h9OPTUUEFF nnXs}}===/Q!QR==!!00BaG;<< H    c                    | j                          |j                         s]t        j                  dk(  rt        j
                  }nt        j                  }t        j                  t        j                         |       y y )Nr   )
stopdoner   platformsignalCTRL_C_EVENTSIGINToskillgetpid)loopr'   ctrl_cs      r#   exit_from_event_loop_threadr2   1   sQ     	IIK99; <<7"((F]]F
		V$ r%   c                    t         j                  j                  d|  d       t         j                  j                          y )Nz	7
[A[Lz
8[Br   stdoutwriteflushstrings    r#   print_during_inputr:   @   s<    JJ	 ( 	  JJr%   c                    t         j                  j                  d|  d       t         j                  j                          y )Nz[K
r4   r8   s    r#   print_over_inputr=   T   s9    JJ	 (-		! JJr%   c                  K   	 t        |        d {   }t        d|  d       	 	 t        j                  |j                               }t        j                  |j                               }t        j                  |||gt
        j                         d {   \  }}	||	v r|j                          ||	v r|j                          ||v rM	 |j                         }
t        |
t              rt        d|
z          nt        d|
j                         z          	 ||v r)|j                         }
|j#                  |
       d {    ||v rn&|j%                          d {    |j&                  |j(                  J t+        |j&                  |j(                        }t        d| d       t	        ||       y 7 # t        $ r(}t        d|  d| d       t	        ||       Y d }~y d }~ww xY w7 Z# t         $ r Y w xY w7 7 # |j%                          d {  7   |j&                  |j(                  J t+        |j&                  |j(                        }t        d| d       t	        ||       w xY ww)	NzConnected to .zFailed to connect to z: )return_whenz< z< (binary) zConnection closed: )r	   r:   	Exceptionr=   r2   asynciocreate_taskrecvgetwaitFIRST_COMPLETEDcancelresult
isinstancestrhexr   sendclose
close_codeclose_reasonr   )urir0   inputsr'   	websocketexcincomingoutgoingr(   pendingmessageclose_statuss               r#   
run_clientrZ   `   sN    3!#,&	 	]3%q12)0,3,?,?	@P,QH,3,?,?

,MH #*,,8T*8O8O# MD'
 7"!7"!4J&oo/G "'3/*4'>:*=7;;=+HI4"//+nnW---t|? D oo##/I4J4J4VVVY1193I3IJ.|nA>?#D$/c ' 0RuA>?#D$/ (  . 	 ioo##/I4J4J4VVVY1193I3IJ.|nA>?#D$/s   I<F? F<F? I<A2H	 G33H	 G6 A$H	 HH	 I<!H"AI<<F? ?	G0G+&I<+G00I<3H	 6	H?H	 HH	 I<	I9H AI99I<c                 p   t        j                  ddd      } | j                         }|j                  dd       |j                  dd	d
       | j	                         }|j
                  rt        dt                y |j                  | j                  d       t        j                  dk(  r	 t                	 dd l}t'        j(                         }dd}|j+                   |             }|j-                         }|j/                  t1        |j                  |||             t3        j4                  |j6                        }	|	j9                          	 	 t;        d      }
|j=                  |j>                  |
       (# t        $ rL}t        j                  j                  d| d       t        j                  j!                          Y d }~d }~ww xY w# t$        $ r Y #w xY w# t@        tB        f$ r |j=                  |jD                  d        Y nw xY w|	jG                          |jI                          y )Nzpython -m websocketszInteractive WebSocket client.F)progdescriptionadd_helpz	--version
store_true)actionrQ   z<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<   r   c                 2   K   t        j                         S w)N)rB   Queue r%   r#   queue_factoryzmain.<locals>.queue_factory   s     }}s   )targetz> )returnasyncio.Queue[str])%argparseArgumentParseradd_mutually_exclusive_groupadd_argument
parse_argsr
   printwebsockets_versionrQ   errorr   r)   r$   r   stderrr6   r7   readlineImportErrorrB   new_event_looprun_until_completecreate_futurerC   rZ   	threadingThreadrun_foreverstartinputcall_soon_threadsafe
put_nowaitKeyboardInterruptEOFError
set_resultjoinrN   )parsergroupargsrT   rt   r0   rg   rR   r'   threadrX   s              r#   mainr      s   $$#3F
 //1E	{<8	ugS9D||./01xxBC ||w	
 !!#D "&!8!8!IF "&!3!3!5D 	Z$=> T%5%56F
LLN9DkG%%f&7&7A I  	JJ::=bB
 JJ	  < x( 9!!$//489 KKM 	JJLs=   0
E> ;G )G& >	GAGG	G#"G#&+HH__main__)ri   None)r0   asyncio.AbstractEventLoopr'   asyncio.Future[None]ri   r   )r9   rK   ri   r   )
rQ   rK   r0   r   rR   rj   r'   r   ri   r   )
__future__r   rk   rB   r-   r*   r   ry   typingr   r   
exceptionsr   framesr   legacy.clientr	   r
   rq   r)   r$   r2   r:   r=   rZ   r   __name__rf   r%   r#   <module>r      s    "   	  
   (  " 2 <<7=<%
#%
% 
%(	80	80
#80 80 	80
 
80vGT zF r%   