o
    >h %                     @   s`  U d 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
mZ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 zddlmZ W n eyr   dZdZ eeej! df e"d< e#d Y nw eZej!fZ dZ$dZ%e&d\Z'Z(e)dZ*e)dZ+eej,ej-ej.ej/ge R  G dd de
j0eZ1dd Z2ddgZ3dS )z'
Reactor that uses IO completion ports
    N)TupleType)implementer)baseerror
interfacesmain)Process)iocpsupporttcpudp)WAIT_TIMEOUT)_ThreadedWin32EventsMixin)failurelog)TLSMemoryBIOFactory ._extraInterfacesz|pyOpenSSL 0.10 or newer is required for SSL support in iocpreactor. It is missing, so the reactor will not support SSL APIs.i       z#Handler has no getFileHandle methodzFiledescriptor went awayc                   @   s   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d Zdd Z	dd Z
dd ZdejdejdejfddZd0ddZd1ddZedurNd0ddZ	d1d d!Znd0d"dZ	d1d#d!Zd2d%d&Z	'd3d(d)Zd*i dddd+dfd,d-Zd.d/ ZdS )4IOCPReactorNc                 C   s"   t j|  t | _t | _d S N)r   ReactorBase__init___iocpCompletionPortportsethandlesselfr   r   /var/www/vedio/testing/chatpythonscript.ninositsolution.com/env/lib/python3.10/site-packages/twisted/internet/iocpreactor/reactor.pyr   <   s   
zIOCPReactor.__init__c                 C      | j | d S r   )r   addr    handler   r   r!   addActiveHandleA      zIOCPReactor.addActiveHandlec                 C   r"   r   )r   discardr$   r   r   r!   removeActiveHandleD   r'   zIOCPReactor.removeActiveHandlec                 C   s   d}|du r	t }n	tt td| }| j|\}}}}	 |tkr#dS |tkr<|tks-J t	|j
| j||| |d7 }|tkrBdS | jd\}}}}q)z=
        Poll the IO completion port for new events.
        r   Nr      )MAX_TIMEOUTminintr   getEventr   
KEY_WAKEUP
KEY_NORMALr   callWithLoggerowner_callEventCallbackEVENTS_PER_LOOP)r    timeoutprocessed_eventsrcnumByteskeyevtr   r   r!   doIterationG   s$   zIOCPReactor.doIterationc                 C   s   |j }d }z |||| t|dd }|st}n| dkrt}|r$W d S W n ty8   t d }t	  Y nw |rE|
t| d S d S )NgetFileHandler*   )r2   callbackgetattr_NO_GETHANDLE_NO_FILEDESCBaseExceptionsysexc_infor   errloseConnectionr   Failure)r    r7   r8   r:   r2   whyhandfnr   r   r!   r3   s   s&   
zIOCPReactor._callEventCallbackc                 C   s   d S r   r   r   r   r   r!   installWaker   s   zIOCPReactor.installWakerc                 C   s   | j dtd  d S )Nr   )r   	postEventr/   r   r   r   r!   wakeUp   s   zIOCPReactor.wakeUpc                 C   s   | j |t d S r   )r   	addHandler0   r$   r   r   r!   registerHandle   s   zIOCPReactor.registerHandleafstypereturnc                 C   s   t  ||}| |  |S r   )socketrN   fileno)r    rO   rP   sktr   r   r!   createSocket   s   zIOCPReactor.createSocket2    c                 C      t ||||| }|  |S )zI
        @see: twisted.internet.interfaces.IReactorTCP.listenTCP
        )r   PortstartListening)r    r   factorybacklog	interfacepr   r   r!   	listenTCP   s   zIOCPReactor.listenTCP   c                 C   s    t |||||| }|  |S )zJ
        @see: twisted.internet.interfaces.IReactorTCP.connectTCP
        )r   	Connectorconnect)r    hostr   r[   r5   bindAddresscr   r   r!   
connectTCP   s   zIOCPReactor.connectTCPc                 C   s"   |  |t|d|||}d|_|S )zQ
            @see: twisted.internet.interfaces.IReactorSSL.listenSSL
            FTLS)r_   r   _typer    r   r[   contextFactoryr\   r]   r   r   r!   	listenSSL   s   
zIOCPReactor.listenSSLc                 C   s   |  ||t|d|||S )zR
            @see: twisted.internet.interfaces.IReactorSSL.connectSSL
            T)rf   r   r    rc   r   r[   rj   r5   rd   r   r   r!   
connectSSL   s   
zIOCPReactor.connectSSLc                 C      t d)z
            Non-implementation of L{IReactorSSL.listenSSL}.  Some dependency
            is not satisfied.  This implementation always raises
            L{NotImplementedError}.
            |pyOpenSSL 0.10 or newer is required for SSL support in iocpreactor. It is missing, so the reactor does not support SSL APIs.NotImplementedErrorri   r   r   r!   rk      s   c                 C   rn   )z
            Non-implementation of L{IReactorSSL.connectSSL}.  Some dependency
            is not satisfied.  This implementation always raises
            L{NotImplementedError}.
            ro   rp   rl   r   r   r!   rm      s       c                 C   rX   )z
        Connects a given L{DatagramProtocol} to the given numeric UDP port.

        @returns: object conforming to L{IListeningPort}.
        )r   rY   rZ   )r    r   protocolr]   maxPacketSizer^   r   r   r!   	listenUDP   s   zIOCPReactor.listenUDPFc                 C   s    t ||||| |}|  |S )z
        Connects a given DatagramProtocol to the given numeric UDP port.

        EXPERIMENTAL.

        @returns: object conforming to IListeningPort.
        )r   MulticastPortrZ   )r    r   rs   r]   rt   listenMultipler^   r   r   r!   listenMulticast   s
   
zIOCPReactor.listenMulticastr   r   c
           
      C   sN   |durt d|durt d|rt d|	durt dt| |||||S )z"
        Spawn a process.
        Nz,Setting UID is unsupported on this platform.z,Setting GID is unsupported on this platform.z&PTYs are unsupported on this platform.zGCustom child file descriptor mappings are unsupported on this platform.)
ValueErrorr	   )
r    processProtocol
executableargsenvpathuidgidusePTYchildFDsr   r   r!   spawnProcess   s   zIOCPReactor.spawnProcessc                 C   s   t | j}| j  |S r   )listr   clear)r    resr   r   r!   	removeAll  s   

zIOCPReactor.removeAll)rV   rW   )r`   N)rW   rr   )rW   rr   F)__name__
__module____qualname__r   r   r&   r)   r;   r3   rJ   rL   rN   rR   AddressFamily
SocketKindrU   r_   rf   r   rk   rm   ru   rx   r   r   r   r   r   r!   r   2   sL    ,








r   c                  C   s   t  } t|  d S r   )r   r   installReactor)rr   r   r!   install  s   r   )4__doc__rR   rC   warningstypingr   r   zope.interfacer   twisted.internetr   r   r   r   twisted.internet._dumbwin32procr	   twisted.internet.iocpreactorr
   r   r   r   "twisted.internet.iocpreactor.constr   "twisted.internet.win32eventreactorr   twisted.pythonr   r   twisted.protocols.tlsr   _TLSMemoryBIOFactoryImportErrorr   IReactorSSL__annotations__warnr+   r4   ranger0   r/   ConnectionFdescWentAwayr@   rA   IReactorTCPIReactorUDPIReactorMulticastIReactorProcessr   r   r   __all__r   r   r   r!   <module>   sP   


 b