
    Yf                    x   U d Z ddlm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mZmZ ddlmZ ddlmZ dd	lmZmZmZ dd
lmZ ddlmZ d%dZedk    reZnej        Z	 ddlmZ eZn# e$ r
 e Zde!d<   Y nw xY w ed          Z"d&dZ#d'd Z$ ee           G d! d"ej%        e                      Z&d# Z'd$gZ(dS )(z
Select reactor
    )annotationsN)EBADFEINTR)sleep)CallableTypeTypeVar)implementer)	posixbase)IReactorFDSetIReadDescriptorIWriteDescriptor)log)platformTypec                    | s+|s)|d}nt          |d          }t          |           g g g fS ||dk    rd}t          j        | |||          \  } }}| ||z   g fS )zWin32 select wrapper.Ng{Gz?gMbP?g      ?)minr   select)rwetimeouts       P/var/www/html/env/lib/python3.11/site-packages/twisted/internet/selectreactor.pywin32selectr      s      ?GG'5))Gg2rz 'C--mAq!W--GAq!a!eR<    win32)_ThreadedWin32EventsMixinzType[object]
_extraBase_TtoPreenlist[_T]	preenIntoset[_T]
disconnect%Callable[[_T, Exception, bool], None]returnNonec                   |                                  | D ]m}	 t          j        |g|g|gd           |                    |           3# t          $ r.}t	          j        d|z              |||d           Y d }~fd }~ww xY wd S )Nr   zbad descriptor %sF)clearr   add	Exceptionr   msg)r   r!   r#   
selectabler   s        r   	_onePreenr-   :   s    
 OO & &
	&M:,zlAFFF
 MM*%%%%	  	- 	- 	-G'*4555Jz1e,,,,,,,,	-& &s   A


B$A==Breadsset[IReadDescriptor]writesset[IWriteDescriptor]ECallable[[IReadDescriptor | IWriteDescriptor, Exception, bool], None]c                    t          j        d           t          |           }t          |          }t          || |           t          |||           d S )Nz1Malformed file descriptor found.  Preening lists.)r   r+   listr-   )r.   r0   r#   readerswriterss        r   _preenDescriptorsr7   J   sU    
 G?@@@%)%[[G&*6llGguj)))gvz*****r   c                  \    e Zd ZdZddZddZd ZeZd Zd Z	d	 Z
d
 Zd Zd Zd Zd ZdS )SelectReactora-  
    A select() based reactor - runs on all POSIX platforms and on Win32.

    @ivar _reads: A set containing L{FileDescriptor} instances which will be
        checked for read events.

    @ivar _writes: A set containing L{FileDescriptor} instances which will be
        checked for writability.
    r%   r&   c                    t                      | _        t                      | _        t          j                            |            dS )zV
        Initialize file descriptor tracking dictionaries and the base class.
        N)set_reads_writesr   PosixReactorBase__init__selfs    r   r?   zSelectReactor.__init__b   s7     -0EE.1ee"++D11111r   c                F    t          | j        | j        | j                   d S N)r7   r<   r=   _disconnectSelectabler@   s    r   r7   zSelectReactor._preenDescriptorsj   s!    $+t|T5OPPPPPr   c                   	 t          | j        | j        g |          \  }}}n# t          $ r |                                  Y dS t
          $ r+ t          j                     |                                  Y dS t          $ rv}|j	        d         dv r| j        s| j        sY d}~dS  |j	        d         t          k    rY d}~dS |j	        d         t          k    r|                                  Y d}~dS  d}~ww xY w| j        }t          j        }|d| j        f|d| j        ffD ]\  }}	}
|D ]}||
vr |||||	           dS )z
        Run one iteration of the I/O monitor loop.

        This will run all selectables who had input or output readiness
        waiting for them.
        Nr   )r      doReaddoWrite)_selectr<   r=   
ValueErrorr7   	TypeErrorr   errOSErrorargsr   r   _doReadOrWritecallWithLogger)rA   r   r   r   ignoredse_drdw_logrunselectablesmethodfdsetr,   s               r   doSelectzSelectReactor.doSelectm   s   	#DKr7KKMAq'' 	 	 	""$$$FF 	 	 	 GIII""$$$FF 	 	 	 wqzV## dl FFFFFu$$u$$&&((( #	& #$$+&	4<(+
 
	? 
	?&K * ? ?
 U**
E:v>>>>?	
	? 
	?s3    # C60C67	C6 C1#C1 *C10C11C6c                    	  t          ||                      }n<# t          $ r/ t          j                    d         }t	          j                     Y nw xY w|r|                     |||dk               d S d S )N   rG   )getattrBaseExceptionsysexc_infor   rL   rD   )rA   r,   rV   whys       r   rO   zSelectReactor._doReadOrWrite   s    	-'*f--//CC 	 	 	,..#CGIIIII	  	L&&z3(8JKKKKK	L 	Ls    6AAc                :    | j                             |           dS )zR
        Add a FileDescriptor for notification of data available to read.
        N)r<   r)   rA   readers     r   	addReaderzSelectReactor.addReader   s     	r   c                :    | j                             |           dS )zS
        Add a FileDescriptor for notification of data available to write.
        N)r=   r)   rA   writers     r   	addWriterzSelectReactor.addWriter   s      	     r   c                :    | j                             |           dS )zQ
        Remove a Selectable for notification of data available to read.
        N)r<   discardra   s     r   removeReaderzSelectReactor.removeReader   s      	F#####r   c                :    | j                             |           dS )zR
        Remove a Selectable for notification of data available to write.
        N)r=   ri   re   s     r   removeWriterzSelectReactor.removeWriter   s      	V$$$$$r   c                B    |                      | j        | j                  S rC   )
_removeAllr<   r=   r@   s    r   	removeAllzSelectReactor.removeAll   s    t{DL999r   c                *    t          | j                  S rC   )r4   r<   r@   s    r   
getReaderszSelectReactor.getReaders   s    DK   r   c                *    t          | j                  S rC   )r4   r=   r@   s    r   
getWriterszSelectReactor.getWriters   s    DL!!!r   N)r%   r&   )__name__
__module____qualname____doc__r?   r7   rX   doIterationrO   rc   rg   rj   rl   ro   rq   rs    r   r   r9   r9   V   s         2 2 2 2Q Q Q Q2? 2? 2?h KL L L     ! ! !$ $ $% % %: : :! ! !" " " " "r   r9   c                 D    t                      } ddlm}  ||            dS )zDConfigure the twisted mainloop to be run using the select() reactor.r   )installReactorN)r9   twisted.internet.mainr{   )reactorr{   s     r   installr~      s3    ooG444444N7r   r~   rC   )r   r    r!   r"   r#   r$   r%   r&   )r.   r/   r0   r1   r#   r2   r%   r&   ))rw   
__future__r   r   r]   errnor   r   timer   typingr   r   r	   zope.interfacer
   twisted.internetr   twisted.internet.interfacesr   r   r   twisted.pythonr   twisted.python.runtimer   r   rI   "twisted.internet.win32eventreactorr   r   ImportErrorobject__annotations__r   r-   r7   r>   r9   r~   __all__ry   r   r   <module>r      s  
   # " " " " "  



               * * * * * * * * * * & & & & & & & & & & & & X X X X X X X X X X       / / / / / /   $ 7GGmG+LLLLLL +JJ  & & &%J%%%%%%&
 WT]]& & & & 	+ 	+ 	+ 	+ ]t" t" t" t" t"I.
 t" t" t"n   +s   !A* *A98A9