Ë
    ojÖ  ã                   ó8  — U d 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 ddl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 ee«       G d„ dej8                  e«      «       Zd„ ZdgZy# e$ r eZe	e   ed<   Y Œ9w xY w)z
Select reactor
é    N)ÚEBADFÚEINTR)Úsleep)ÚType)Úimplementer)Ú	posixbase)ÚIReactorFDSet)Úlog)ÚplatformTypec                 ó¦   — | s#|s!|€d}nt        |d«      }t        |«       g g g fS |�|dkD  rd}t        j                  | |||«      \  } }}| ||z   g fS )zWin32 select wrapper.g{®Gáz„?gü©ñÒMbP?g      à?)Úminr   Úselect)ÚrÚwÚeÚtimeouts       ú@/usr/lib/python3/dist-packages/twisted/internet/selectreactor.pyÚwin32selectr      sl   € á‘àˆ?Ø‰Gä˜' 5Ó)ˆGÜˆgŒØ�2�rˆzÐð €˜' Cš-ØˆÜ�m‰m˜A˜q ! WÓ-�G€A€qˆ!Øˆa�!‰e�Rˆ<Ðó    Úwin32)Ú_ThreadedWin32EventsMixinÚ
_extraBasec                   óV   — e Zd ZdZd„ Zd„ Zd„ ZeZd„ Zd„ Z	d„ Z
d„ Zd	„ Zd
„ Zd„ Zd„ Zy)Ú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.
    c                 ó~   — t        «       | _        t        «       | _        t        j                  j                  | «       y)zV
        Initialize file descriptor tracking dictionaries and the base class.
        N)ÚsetÚ_readsÚ_writesr   ÚPosixReactorBaseÚ__init__©Úselfs    r   r    zSelectReactor.__init__D   s*   € ô “eˆŒÜ“uˆŒÜ×"Ñ"×+Ñ+¨DÕ1r   c                 ó  — t        j                  d«       t        | j                  «      }t        | j                  «      }| j                  j                  «        | j                  j                  «        | j                  |f| j                  |ffD ]9  \  }}|D ]/  }	 t        j                  |g|g|gd«       |j                  |«       Œ1 Œ; y # t        $ r5}t        j                  d|z  «       | j                  ||d«       Y d }~Œnd }~ww xY w)Nz1Malformed file descriptor found.  Preening lists.r   zbad descriptor %sF)
r
   ÚmsgÚlistr   r   Úclearr   ÚaddÚ	ExceptionÚ_disconnectSelectable)r"   ÚreadersÚwritersÚselSetÚselListÚ
selectabler   s          r   Ú_preenDescriptorszSelectReactor._preenDescriptorsL   sê   € Ü�‰ÐCÔDÜ�t—{‘{Ó#ˆÜ�t—|‘|Ó$ˆØ�‰×ÑÔØ�‰×ÑÔØ!%§¡¨gÐ 6¸¿¹ÀwÐ8OÐPò 	+‰OˆF�GØ%ò +�
ð+Ü—M‘M : ,°°¸z¸lÈAÔNð
 —J‘J˜zÕ*ñ+ñ	+øô !ò EÜ—G‘GÐ/°*Ñ<Ô=Ø×.Ñ.¨z¸1¸e×DÑDûðEús   ÂCÃ	DÃ+DÄDc                 ó¤  — 	 t        | j                  | j                  g |«      \  }}}| j                  }t        j                  }|d| j                  f|d| j                  ffD ]  \  }}	}
|D ]  }||
vrŒ |||||	«       Œ Œ y# t        $ r | j	                  «        Y yt
        $ r' t        j                  «        | j	                  «        Y yt        $ r{}|j                  d   dv r| j                  s| j                  sY d}~y‚ |j                  d   t        k(  rY d}~y|j                  d   t        k(  r| j	                  «        Y d}~y‚ d}~ww xY w)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   Ú
ValueErrorr/   Ú	TypeErrorr
   ÚerrÚOSErrorÚargsr   r   Ú_doReadOrWriteÚcallWithLogger)r"   r   r   r   ÚignoredÚseÚ_drdwÚ_logrunÚselectablesÚmethodÚfdsetr.   s               r   ÚdoSelectzSelectReactor.doSelect\   sD  € ð	Ü# D§K¡K°·±¸rÀ7ÓK‰MˆAˆq�'ð< ×#Ñ#ˆÜ×$Ñ$ˆà�˜$Ÿ+™+Ð&Ø�	˜4Ÿ<™<Ð(ð+
ò 
	?Ñ&ˆK˜ ð *ò ?�
ð  UÑ*Øá˜
 E¨:°vÕ>ñ?ñ	
	?øô? ò 	à×"Ñ"Ô$ÙÜò 	ô �G‰GŒIØ×"Ñ"Ô$ÙÜò 	ð �w‰w�q‰z˜VÑ#àŸš¨d¯lªlÜàØ—‘˜‘œuÒ$ÜØ—‘˜‘œuÒ$Ø×&Ñ&Ô(Üð ûð#	ús5   ‚&B ÂEÂ,EÃEÃ)E
ÄE
Ä&E
Å	E
Å
Ec                 óÎ   — 	  t        ||«      «       }|r| j                  |||dk(  «       y y # t        $ r. t        j                  «       d   }t	        j
                  «        Y ŒPw xY w)Né   r2   )ÚgetattrÚBaseExceptionÚsysÚexc_infor
   r7   r)   )r"   r.   rA   Úwhys       r   r:   zSelectReactor._doReadOrWrite’   sc   € ð	Ø-”'˜* fÓ-Ó/ˆCñ Ø×&Ñ& z°3¸À(Ñ8JÕKð øô ò 	Ü—,‘,“. Ñ#ˆCÜ�G‰GŽIð	ús   ‚- ­4A$Á#A$c                 ó:   — | j                   j                  |«       y)zR
        Add a FileDescriptor for notification of data available to read.
        N)r   r'   ©r"   Úreaders     r   Ú	addReaderzSelectReactor.addReader›   s   € ð 	�‰�‰˜Õr   c                 ó:   — | j                   j                  |«       y)zS
        Add a FileDescriptor for notification of data available to write.
        N)r   r'   ©r"   Úwriters     r   Ú	addWriterzSelectReactor.addWriter¡   s   € ð 	�‰×Ñ˜Õ r   c                 ó:   — | j                   j                  |«       y)zQ
        Remove a Selectable for notification of data available to read.
        N)r   ÚdiscardrL   s     r   ÚremoveReaderzSelectReactor.removeReader§   s   € ð 	�‰×Ñ˜FÕ#r   c                 ó:   — | j                   j                  |«       y)zR
        Remove a Selectable for notification of data available to write.
        N)r   rT   rP   s     r   ÚremoveWriterzSelectReactor.removeWriter­   s   € ð 	�‰×Ñ˜VÕ$r   c                 óN   — | j                  | j                  | j                  «      S ©N)Ú
_removeAllr   r   r!   s    r   Ú	removeAllzSelectReactor.removeAll³   s   € Ø�‰˜tŸ{™{¨D¯L©LÓ9Ð9r   c                 ó,   — t        | j                  «      S rY   )r%   r   r!   s    r   Ú
getReaderszSelectReactor.getReaders¶   s   € Ü�D—K‘KÓ Ð r   c                 ó,   — t        | j                  «      S rY   )r%   r   r!   s    r   Ú
getWriterszSelectReactor.getWriters¹   s   € Ü�D—L‘LÓ!Ð!r   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r    r/   rC   ÚdoIterationr:   rN   rR   rU   rW   r[   r]   r_   © r   r   r   r   8   sG   „ ñò2ò+ò 2?ðh €KòLò ò!ò$ò%ò:ò!ó"r   r   c                  ó4   — t        «       } ddlm}  || «       y)zDConfigure the twisted mainloop to be run using the select() reactor.r   )ÚinstallReactorN)r   Útwisted.internet.mainrg   )Úreactorrg   s     r   Úinstallrj   ½   s   € ä‹o€GÝ4á�7Õr   rj   rY   ) rc   r   rH   Úerrnor   r   Útimer   Útypingr   Úzope.interfacer   Útwisted.internetr   Útwisted.internet.interfacesr	   Útwisted.pythonr
   Útwisted.python.runtimer   r   r4   Ú"twisted.internet.win32eventreactorr   r   ÚImportErrorÚobjectÚ__annotations__r   r   rj   Ú__all__re   r   r   ú<module>rx      s°   ðò
ó
 Û 
ß Ý Ý å &å &Ý 5Ý Ý /óð$ �7ÒØ�Gà�m‰m€Gð+ÝLð +€Jñ ˆ]ÓôA"�I×.Ñ.°
ó A"ó ðA"òHð ˆ+�øðg ò &Ø%€J��V‘Õ%ð&ús   ÁB ÂBÂB