
    \dD                         d Z ddlZddlZddlmZ ddlZddlmZmZ ddl	m
Z
mZmZmZmZ ddlmZ  ee
           G d d                      Z eeee           G d	 d
ej                              ZdS )zM
Windows-specific implementation of the L{twisted.internet.stdio} interface.
    N)implementer)_pollingfilemain)IAddress	IConsumerIHalfCloseableProtocolIPushProducer
ITransport)Failurec                       e Zd ZdS )Win32PipeAddressN)__name__
__module____qualname__     <lib/python3.11/site-packages/twisted/internet/_win32stdio.pyr   r      s        Dr   r   c                   v    e Zd ZdZdZddZd Zd Zd ZdZ	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd ZdS )
StandardIOFNc                 f   |ddl m} t          ddd          D ]!}t          j        |t
          j                   "t          j        	                    | |           || _
        t          j        t          j                  }t          j        t          j                  }t          j        || j        | j                  | _        t          j        || j                  | _        |                     | j                   |                     | j                   | j
                            |            dS )z
        Start talking to standard IO with the given protocol.

        Also, put it stdin/stdout/stderr into binary mode.
        Nr   )reactor      )twisted.internetr   rangemsvcrtsetmodeosO_BINARYr   _PollingTimer__init__protowin32apiGetStdHandleSTD_INPUT_HANDLESTD_OUTPUT_HANDLE_PollableReadPipedataReceivedreadConnectionLoststdin_PollableWritePipewriteConnectionLoststdout_addPollableResourcemakeConnection)selfr"   r   stdfdhstdinhstdouts         r   r!   zStandardIO.__init__%   s    ?0000001a^^ 	/ 	/EN5"+...."++D':::
&x'@AA'(BCC!3D%t'>
 

 #5gt?WXX!!$*---!!$+...
!!$'''''r   c                 :    | j                             |           d S N)r"   r(   r0   datas     r   r(   zStandardIO.dataReceivedB   s    
%%%%%r   c                     t          j        | j                  r| j                                         |                                  d S r5   )r   
providedByr"   r)   checkConnLostr0   s    r   r)   zStandardIO.readConnectionLostE   sC    !,TZ88 	,J))+++r   c                     t          j        | j                  r| j                                         |                                  d S r5   )r   r9   r"   r,   r:   r;   s    r   r,   zStandardIO.writeConnectionLostJ   sC    !,TZ88 	-J**,,,r   r   c                     | xj         dz  c_         | j         dk    rAd| _        d| _        | j                            t          t          j                             d S d S )Nr   r   T)	connsLostdisconnectingdisconnectedr"   connectionLostr   r   CONNECTION_DONEr;   s    r   r:   zStandardIO.checkConnLostQ   s^    !>Q!%D $DJ%%gd.B&C&CDDDDD r   c                 :    | j                             |           d S r5   )r-   writer6   s     r   rD   zStandardIO.writeZ   s    $r   c                 `    | j                             d                    |                     d S )Nr   )r-   rD   join)r0   seqs     r   writeSequencezStandardIO.writeSequence]   s(    #((3--(((((r   c                 x    d| _         | j                                         | j                                         d S )NT)r?   r*   closer-   r;   s    r   loseConnectionzStandardIO.loseConnection`   s8    !
r   c                     t                      S r5   r   r;   s    r   getPeerzStandardIO.getPeere       !!!r   c                     t                      S r5   rM   r;   s    r   getHostzStandardIO.getHosth   rO   r   c                 8    | j                             ||          S r5   )r-   registerProducer)r0   producer	streamings      r   rS   zStandardIO.registerProducerm   s    {++Hi@@@r   c                 4    | j                                         S r5   )r-   unregisterProducerr;   s    r   rW   zStandardIO.unregisterProducerp   s    {--///r   c                 8    | j                                          d S r5   )r*   stopProducingr;   s    r   rY   zStandardIO.stopProducingw   s    
  """""r   c                 8    | j                                          d S r5   )r*   pauseProducingr;   s    r   r[   zStandardIO.pauseProducing|   s    
!!#####r   c                 8    | j                                          d S r5   )r*   resumeProducingr;   s    r   r]   zStandardIO.resumeProducing   s    
""$$$$$r   r5   )r   r   r   r?   r@   r!   r(   r)   r,   r>   r:   rD   rH   rK   rN   rQ   rS   rW   rY   r[   r]   r   r   r   r   r      s        ML( ( ( (:& & &  
  
 IE E E     ) ) )  
" " "" " "
A A A0 0 0# # #
$ $ $% % % % %r   r   )__doc__r   r   zope.interfacer   r#   r   r   r   twisted.internet.interfacesr   r   r   r	   r
   twisted.python.failurer   r   r    r   r   r   r   <module>rb      sK   
  				 & & & & & &  / / / / / / / /              + * * * * * X	 	 	 	 	 	 	 	 ZM22`% `% `% `% `%+ `% `% 32`% `% `%r   