
    2Bf'                     v    d dl Z d dlZd dlZddlmZ ddlmZ ddlmZ ddlmZ  G d dej                        Z	y)	    N   )
exceptions)packet)payload)socketc                   J    e Zd Zd Zd Zd Zd Zd Zd ZddZ	d Z
d	 Zd
 Zy)AsyncSocketc                   K   	 t        j                  | j                  j                         | j                  j
                  | j                  j                  z          d{   g}| j                  j                          |dgk(  rg S 	 	 | j                  j                         }| j                  j                          || j                  j                  d       	 |S |j                  |       g7 # t         j                  t         j                  f$ r t        j                         w xY w# t         j                  $ r Y |S w xY ww)z'Wait for packets to send to the client.N)asynciowait_forqueuegetserverping_intervalping_timeout	task_doneTimeoutErrorCancelledErrorr   
QueueEmpty
get_nowait
put_nowaitappend)selfpacketspkts      W/var/www/highfloat_scraper/venv/lib/python3.12/site-packages/engineio/asyncio_socket.pypollzAsyncSocket.poll   s'    	*$--

 ))DKK,D,DDF F GG JJ  " tfIjj++-

$$&;JJ))$/  s# F $$g&<&<= 	*''))	* %% s`   EAC2  C0!C2  	E
AD- ED- /E0C2 28D**E-E EEEc           	      |  K   | j                   j                  j                  d| j                  t        j
                  |j                     t        |j                  t              s|j                  nd       |j                  t        j                  k(  r| j                          y|j                  t        j                  k(  rP| j                   j                  d| j                  |j                  | j                   j                         d{    y|j                  t        j                  k(  r;| j!                  t	        j"                  t        j$                               d{    y|j                  t        j&                  k(  r| j)                  dd       d{    yt+        j,                         7 7 T7 w)	zReceive packet from the client.z%s: Received packet %s data %s<binary>message)	run_asyncNFTwaitabort)r   loggerinfosidr   packet_namespacket_type
isinstancedatabytesPONGschedule_pingMESSAGE_trigger_eventasync_handlersUPGRADEsendPacketNOOPCLOSEcloser   UnknownPacketErrorr   r   s     r   receivezAsyncSocket.receive#   s0     @ $&*=*=coo*N0:388U0K%/	1 ??fkk) __.++,,488SXX++44 - 6 6 6 __.))FMM&++6777__,**%t*444//116 84s7   D	F<F6AF<#F8$8F<F:F<8F<:F<c                 p  K   | j                   rt        j                         | j                  rt	        j                         | j                  z
  | j
                  j                  kD  rL| j
                  j                  j                  d| j                         | j                  dd       d{    yy7 w)z,Make sure the client is still sending pings.z"%s: Client is gone, closing socketFr"   NT)closedr   SocketIsClosedError	last_pingtimer   r   r%   r&   r'   r7   r   s    r   check_ping_timeoutzAsyncSocket.check_ping_timeout6   s     ;;0022>>		dnn,t{{/G/GGKK##$H$(HH.
 **%u*555 6s   B+B6-B4.B6c           	      |  K   | j                          d{   sy| j                  j                  |       d{    | j                  j                  j                  d| j                  t        j                  |j                     t        |j                  t              s|j                         yd       y7 7 w)zSend a packet to the client.Nz%s: Sending packet %s data %sr   )rA   r   putr   r%   r&   r'   r   r(   r)   r*   r+   r,   r9   s     r   r3   zAsyncSocket.sendE   s     ,,...**..%%% ? $&*=*=coo*N0:388U0K	1 &0	1	 / &s    B<B8#B<B:A>B<:B<c                   K   |j                  dd      j                         j                  d      D cg c]  }|j                          }}|j                  dd      j                         }d|v r\|| j                  v rN| j
                  j                  j                  d| j                  |        t        | d|z         |       d{   S | j                  s| j                  r$t        j                  t        j                        gS 	 | j                          d{   }|S c c}w 7 `7 # t         j"                  $ rG t%        j&                         }| j)                  d	
       d{  7   |d   j+                  |d         w xY ww)z2Handle a long-polling GET request from the client.HTTP_CONNECTION ,HTTP_UPGRADEupgradez%%s: Received request to upgrade to %s	_upgrade_NF)r#   r      )r   lowersplitstripupgrade_protocolsr   r%   r&   r'   getattr	upgradingupgradedr   r4   r5   r   r   r   sysexc_infor7   with_traceback)r   environsconnections	transportr   excs          r   handle_get_requestzAsyncSocket.handle_get_requestP   s[     [[!2B7==?EEcJL GGIL L KK399;	#	T5K5K(KKK##$K$(HHi9?{Y'>?HHH>>T]] MM&++.//	0 IIK'G
 %L I ($$ 	0,,.C**%*(((a&''A//	0sT   2F
D$A=F
D)	A F

D- D+D- "F
+D- -<F)E,*FF
c                 z  K   t        |j                  dd            }|| j                  j                  kD  rt	        j
                         |d   j                  |       d{   j                  d      }t        j                  |      }|j                  D ]  }| j                  |       d{     y7 T7 	w)z3Handle a long-polling POST request from the client.CONTENT_LENGTH0z
wsgi.inputNzutf-8)encoded_payload)intr   r   max_http_buffer_sizer   ContentTooLongErrorreaddecoder   Payloadr   r:   )r   rV   lengthbodypr   s         r   handle_post_requestzAsyncSocket.handle_post_requestf   s     W[[!1378DKK4440022!,/44V<<DDWMD5Ayy (ll3'''( = (s%   A B;"B7#AB;/B90B;9B;c                   K   | j                   s| j                  sd| _        | j                  j                  d| j                         d{    |s:| j                  t        j                  t        j                               d{    d| _         |r#| j                  j                          d{    yyyy7 o7 57 w)zClose the socket connection.T
disconnectN)r<   closingr   r0   r'   r3   r   r4   r6   r   join)r   r#   r$   s      r   r7   zAsyncSocket.closeq   s     {{4<<DL++,,\488DDDiifll ;<<<DKjjoo'''  $0{D< (s6   A	CB;;CB=*C2B?3	C=C?Cc                 F      fd} j                   j                  |       y )Nc                  `  K   d  _         t        j                   j                  j                         d {     j
                  sa j                  sTt        j                          _          j                  t        j                  t        j                               d {    y y y 7 r7 	wN)r>   r   sleepr   r   rl   r<   r?   r3   r   r4   PINGr@   s   r   	send_pingz,AsyncSocket.schedule_ping.<locals>.send_ping}   su     !DN-- 9 9:::<<!%iifkk :;;; )4< ; <s"   4B.B*A*B."B,#B.,B.)r   start_background_task)r   rs   s   ` r   r.   zAsyncSocket.schedule_ping|   s    	< 	)))4    c                   K   | j                   rt        d      | j                  j                  d   | j                  j	                         S  | j                  j                  d   | j
                        } ||       d{   S 7 w)z1Upgrade the connection from polling to websocket.z Socket has been upgraded already	websocketN)rR   IOErrorr   _async_bad_request_websocket_handler)r   rV   wss      r   _upgrade_websocketzAsyncSocket._upgrade_websocket   sr     ==<==;;k*2;;++--,T[[,T-D-DE[   s   A?BBBc                 F   K    j                   rd _        	 j                          d{   }t	        j
                  |      }|j                  t        j                  k7  s|j                  dk7  r8 j                  j                  j                  d j                         d _        yj                  t	        j
                  t        j                  d      j                                d{     j                   j#                  t	        j
                  t        j$                               d{    	 j                          d{   }t	        j
                  |      }|j                  t        j&                  k7  r@d _         j                  j                  j                  d j                  |       d _        yd _        d _        nd _         d _         fd	}t+        j,                   |             } j                  j                  j                  d
 j                         	 d}t+        j,                  j                               }	 t+        j.                  | j                  j0                   j                  j2                  z          d{   }|n1t	        j
                  |      }	  j9                  |       d{     j                   j#                  d       d{    t+        j.                  |d       d{     jA                  dd       d{    y7 # t        $ r Y yw xY w7 V7 7 # t        $ r
 d _        Y yw xY w7 # t*        j4                  $ r 	 |j7                          n#  Y nxY wY  Y xY w7 # t:        j<                  $ r Y t:        j>                  $ r)  j                  j                  j                  d       Y   j                  j                  j7                  d       Y @xY w7 $7 7 w)z*Engine.IO handler for websocket transport.TN)encoded_packetprobez,%s: Failed websocket upgrade, no PING packetF)r+   zK%s: Failed websocket upgrade, expected UPGRADE packet, received %s instead.c                     K   	 d } 	 j                          d {   } | sy 	 | D ])  }j                  |j	                                d {    + 	 O7 8# t        j                  $ r Y y w xY w7 ##  Y y xY wwrp   )r   r   r   r3   encode)r   r   r   r|   s     r   writerz.AsyncSocket._websocket_handler.<locals>.writer   s     $(IIK/G & 4 ggcjjl3334  0!,,  4s`   A8A AA A8'A1 A/A1 A8A A,)A8+A,,A8/A1 1A53A8z#%s: Upgrade to websocket successfulz!Receive error -- socket is closedzUnknown receive error)timeoutr"   )!	connectedrQ   r#   rx   r   r4   r)   rr   r+   r   r%   r&   r'   r3   r-   r   r   rC   r5   r2   rR   r   ensure_futurer   r   r   r   	exceptionr:   r   r8   r=   r7   )r   r|   r   decoded_pktr   writer_taskrh   	wait_tasks   ``      r   r{   zAsyncSocket._websocket_handler   sV    >>!DNGGIo !--s;K&&&++5$$/""''BDHHN!&''&--'BIIKLLL**..v{{!;<<<GGIo !--s;K&&&..8 %""'',HHc# "' DM"DN!DN DM	 ++FH51488	= A--bggi8I!**KK--0H0HHJ J$ y--q1C
Fll3'''7 L jjnnT"""{D999jje4j000} &  M< & !&VJ )) '') (00 11 ""''(KLF "",,-DE"90sO  P!L8 L5L8 B?P!1M2AP!5M
6P!;M MM DP!AM( M&M( #P!=N NN P!5P6P!PP!/P0P!5L8 8	MP!MP!
P!M M# P!"M##P!&M( (N<NNNNP!NP!N P1P!37P*P!-&PP!P!P!N)TF)__name__
__module____qualname__r   r:   rA   r3   r[   ri   r7   r.   r}   r{    ru   r   r	   r	      s5    .2&	1,	(	(5!e1ru   r	   )
r   rS   r?   rF   r   r   r   r   Socketr	   r   ru   r   <module>r      s,     
     j1&-- j1ru   