§
    Ìtºf#  ã                   ón   — d dl Z d dlZd dlZ ej        ¦   «          d dlmZ d dlmZ dZd„ Z	d
d„Z
dd	„ZdS )é    N)Úreflect)ÚReactorAlreadyInstalledError)Úinstall_optimal_reactorÚinstall_reactorÚcurrent_reactor_klassc                  ó¬   — dt           j        v rCt          j        t           j        d         j        ¦  «                             d¦  «        d         } nd} | S )zK
    Return class name of currently installed Twisted reactor or None.
    ztwisted.internet.reactorú.éÿÿÿÿN)ÚsysÚmodulesr   ÚqualÚ	__class__Úsplit)Úcurrent_reactors    ú]/var/www/surfInsights/venv3-11/lib/python3.11/site-packages/autobahn/twisted/choosereactor.pyr   r   +   sM   € ð "¥S¤[Ð0Ð0Ý!œ,¥s¤{Ð3MÔ'NÔ'XÑYÔY×_Ò_Ð`cÑdÔdÐegÔhˆˆàˆØÐó    Tc                 óÈ  — t          j        ¦   «         }t          ¦   «         }dt          j        v st          j                             d¦  «        rª|dk    r�|€b	 ddlm} |                     ¦   «          | 	                    d¦  «         �nÂ#  | 
                    dt          j        ¦   «         ¬	¦  «         Y �n•xY w| 
                    d
|¬¦  «         | rt          ¦   «         ‚�ni| 	                    d¦  «         �nRt          j        dv rª|dk    r�|€b	 ddlm} |                     ¦   «          | 	                    d¦  «         �n
#  | 
                    dt          j        ¦   «         ¬	¦  «         Y �nÝxY w| 
                    d|¬¦  «         | rt          ¦   «         ‚�n±| 	                    d¦  «         �nšt          j                             d¦  «        r¨|dk    rŒ|€b	 ddlm} |                     ¦   «          | 	                    d¦  «         �nA#  | 
                    dt          j        ¦   «         ¬	¦  «         Y �nxY w| 
                    d|¬¦  «         | rt          ¦   «         ‚né| 	                    d¦  «         nÓ|dk    r¬|€w	 ddlm} |                     ¦   «          | 	                    dt          j        ¬¦  «         nŽ#  | 
                    dt          j        ¦   «         t          j        ¬ ¦  «         Y nWxY w| 
                    d!|t          j        ¬"¦  «         | rt          ¦   «         ‚n!| 	                    d#t          j        ¬¦  «         ddlm} |t           j        _        |S )$a€  
    Try to install the optimal Twisted reactor for this platform:

    - Linux:   epoll
    - BSD/OSX: kqueue
    - Windows: iocp
    - Other:   select

    Notes:

    - This function exists, because the reactor types selected based on platform
      in `twisted.internet.default` are different from here.
    - The imports are inlined, because the Twisted code base is notorious for
      importing the reactor as a side-effect of merely importing. Hence we postpone
      all importing.

    See: http://twistedmatrix.com/documents/current/core/howto/choosing-reactor.html#reactor-functionality

    :param require_optimal_reactor: If ``True`` and the desired reactor could not be installed,
        raise ``ReactorAlreadyInstalledError``, else fallback to another reactor.
    :type require_optimal_reactor: bool

    :returns: The Twisted reactor in place (`twisted.internet.reactor`).
    ÚbsdÚdarwinÚKQueueReactorNr   )Ú	kqreactorzERunning on *BSD or MacOSX and optimal reactor (kqueue) was installed.zJRunning on *BSD or MacOSX, but cannot install kqueue Twisted reactor: {tb})Útbz}Running on *BSD or MacOSX, but cannot install kqueue Twisted reactor, because another reactor ({klass}) is already installed.)ÚklasszIRunning on *BSD or MacOSX and optimal reactor (kqueue) already installed.)Úwin32ÚIOCPReactor©Úreactorz<Running on Windows and optimal reactor (ICOP) was installed.zARunning on Windows, but cannot install IOCP Twisted reactor: {tb}ztRunning on Windows, but cannot install IOCP Twisted reactor, because another reactor ({klass}) is already installed.z@Running on Windows and optimal reactor (ICOP) already installed.ÚlinuxÚEPollReactor)Úepollreactorz;Running on Linux and optimal reactor (epoll) was installed.z@Running on Linux, but cannot install Epoll Twisted reactor: {tb}zsRunning on Linux, but cannot install Epoll Twisted reactor, because another reactor ({klass}) is already installed.z?Running on Linux and optimal reactor (epoll) already installed.ÚSelectReactor)ÚselectreactorzCRunning on "{platform}" and optimal reactor (Select) was installed.)ÚplatformzHRunning on "{platform}", but cannot install Select Twisted reactor: {tb})r   r#   z{Running on "{platform}", but cannot install Select Twisted reactor, because another reactor ({klass}) is already installed.)r   r#   zGRunning on "{platform}" and optimal reactor (Select) already installed.)ÚtxaioÚmake_loggerr   r   r#   Ú
startswithÚtwisted.internetr   ÚinstallÚdebugÚwarnÚ	tracebackÚ
format_excr   Útwisted.internet.iocpreactorr   r    r"   ÚconfigÚloop)Úrequire_optimal_reactorÚlogr   r   Úiocpreactorr    r"   r   s           r   r   r   6   sm  € õ2 Ô
Ñ
Ô
€Cõ ,Ñ-Ô-€Oð •”ÐÐ¥¤× 7Ò 7¸Ñ AÔ AÐð ˜oÒ-Ð-ØÐ&ðgØ:Ð:Ð:Ð:Ð:Ð:Ø×%Ò%Ñ'Ô'Ð'ð —I’IÐeÑfÔfÐfÑføðFØ—H’HÐiÕnwô  oCñ  oEô  oE�Hñ  Fô  Fð  Fð  Fñ  Føøøð —’ð  Yð  ap�ñ  qô  qð  qØ*ð 9Ý6Ñ8Ô8Ð8ñ9ð �IŠIÐaÑbÔbÐbÑbå	Œ˜Ð	"Ð	"ð ˜mÒ+Ð+ØÐ&ð^ØSÐSÐSÐSÐSÐSØ×'Ò'Ñ)Ô)Ð)ð —I’IÐ\Ñ]Ô]Ð]Ñ]øð}Ø—H’HÐ`ÕenÔeyÑe{Ôe{�HÑ|Ô|Ð|Ð|Ñ|øøøð —’ð  Pð  Xg�ñ  hô  hð  hØ*ð 9Ý6Ñ8Ô8Ð8ñ9ð �IŠIÐXÑYÔYÐYÑYå	Œ×	 Ò	  Ñ	)Ô	)ð (xð ˜nÒ,Ð,ØÐ&ð]Ø=Ð=Ð=Ð=Ð=Ð=Ø ×(Ò(Ñ*Ô*Ð*ð —I’IÐ[Ñ\Ô\Ð\Ñ\øð|Ø—H’HÐ_ÕdmÔdxÑdzÔdz�HÑ{Ô{Ð{Ð{Ñ{øøøð —’ð  Oð  Wf�ñ  gô  gð  gØ*ð 9Ý6Ñ8Ô8Ð8ð9ð �IŠIÐWÑXÔXÐXÐXð ˜oÒ-Ð-ØÐ&ð|Ø>Ð>Ð>Ð>Ð>Ð>Ø!×)Ò)Ñ+Ô+Ð+ð —I’IÐcÕnqÔnz�IÑ{Ô{Ð{Ð{øð[Ø—H’HÐgÕluô  mAñ  mCô  mCõ  NQô  NZ�Hñ  [ô  [ð  [ð  [ð  [øøøð —’ð  Wð  _nõ  y|ô  yE�ñ  Fô  Fð  FØ*ð 9Ý6Ñ8Ô8Ð8ð9ð �IŠIÐ_ÕjmÔjvˆIÑwÔwÐwà(Ð(Ð(Ð(Ð(Ð(Ø…E„LÔà€Ns0   ÁB	 Â	*B6ÄE Å*E.ÇH
 È
*H7ÊJ= Ê=5K4Fc                 óÄ  — |st          j        ¦   «         }| r^ddlm} |r|                     d| ¬¦  «         	  || ¦  «         nX#  |                     d| ¬¦  «         t          j        d¦  «         Y n)xY w|r|                     d¦  «         t          |¦  «         ddl	m
} |t           j        _        |r+ddlm} |                     d	 ||j        ¦  «        ¬¦  «         |S )
a¦  
    Install Twisted reactor.

    :param explicit_reactor: If provided, install this reactor. Else, install
        the optimal reactor.
    :type explicit_reactor: obj

    :param verbose: If ``True``, log (at level "info") the reactor that is
        in place afterwards.
    :type verbose: bool

    :param log: Explicit logging to this txaio logger object.
    :type log: obj

    :param require_optimal_reactor: If ``True`` and the desired reactor could not be installed,
        raise ``ReactorAlreadyInstalledError``, else fallback to another reactor.
    :type require_optimal_reactor: bool

    :returns: The Twisted reactor in place (`twisted.internet.reactor`).
    r   )ÚinstallReactorzETrying to install explicitly specified Twisted reactor "{reactor}" ..r   z?Could not install Twisted reactor {reactor}
{log_failure.value}é   z1Automatically choosing optimal Twisted reactor ..)r   z$Running on Twisted reactor {reactor})r$   r%   Útwisted.application.reactorsr4   ÚinfoÚfailurer   Úexitr   r'   r   r.   r/   Útwisted.python.reflectr   r   )Úexplicit_reactorÚverboser1   r0   r4   r   r   s          r   r   r   ¯   s;  € ð* ð "ÝÔÑ!Ô!ˆàð 9ð 	@Ð?Ð?Ð?Ð?Ð?Øð 	xØ�HŠHÐ\ÐfvˆHÑwÔwÐwð	ØˆNÐ+Ñ,Ô,Ð,Ð,øð	Ø�KŠKÐZØ 0ð ñ 2ô 2ð 2åŒH�Q‰KŒKˆKˆKˆKøøøð ð 	JØ�HŠHÐHÑIÔIÐIÝÐ 7Ñ8Ô8Ð8ð )Ð(Ð(Ð(Ð(Ð(Ø…E„LÔàð ZØ/Ð/Ð/Ð/Ð/Ð/Ø�ŠÐ7ÀÀÀgÔFWÑAXÔAXˆÑYÔYÐYà€Ns   ¸A Á-A3)T)NFNT)r   r+   r$   Úuse_twistedÚtwisted.pythonr   Útwisted.internet.errorr   Ú__all__r   r   r   © r   r   ú<module>rB      s§   ðð6 €
€
€
Ø Ð Ð Ð à €€€Ø €Ô Ñ Ô Ð à "Ð "Ð "Ð "Ð "Ð "Ø ?Ð ?Ð ?Ð ?Ð ?Ð ?ð€ðð ð ðvð vð vð vðr3ð 3ð 3ð 3ð 3ð 3r   