
    Vh                         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 ddlmZ  e       Z ee
       G d d	             Z eeee       G d
 dej*                               Zy)zM
Windows-specific implementation of the L{twisted.internet.stdio} interface.
    N)implementer)_pollingfilemain)IAddress	IConsumerIHalfCloseableProtocolIPushProducer
ITransport)Logger)Failurec                       e Zd Zy)Win32PipeAddressN)__name__
__module____qualname__     L/home/dcms/DCMS/lib/python3.12/site-packages/twisted/internet/_win32stdio.pyr   r      s    r   r   c                   t    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y)
StandardIOFNc                    |ddl m} t        ddd      D ]&  }t        j                  |t
        j                         ( t        j                  j                  | |       || _
        t        j                  t        j                        }t        j                  t        j                        }t        j                  || j                   | j"                        | _        t        j&                  || j(                        | _        | j-                  | j$                         | j-                  | j*                         | j                  j/                  |        y)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1a^ 	/ENN5"++.	/ 	""++D':
&&x'@'@A''(B(BC!33D%%t'>'>

 #55gt?W?WX!!$**-!!$++.

!!$'r   c                 :    | j                   j                  |       y N)r#   r)   r1   datas     r   r)   zStandardIO.dataReceivedD   s    

%r   c                 >   t         j                  d      5 }t        j                  | j                        r| j                  j                          d d d        | j                          j                  s| j                  s| j                          y y y # 1 sw Y   DxY w)Nzread connection lost)
_logfailuresHandledr   
providedByr#   r*   checkConnLost	succeededdisconnectingloseConnectionr1   ops     r   r*   zStandardIO.readConnectionLostG   sz    !!"89 	0R%00<

--/	0 	||D$6$6! %7|		0 	0   :BBc                 >   t         j                  d      5 }t        j                  | j                        r| j                  j                          d d d        | j                          j                  s| j                  s| j                          y y y # 1 sw Y   DxY w)Nzwrite connection lost)
r:   r;   r   r<   r#   r-   r=   r>   r?   r@   rA   s     r   r-   zStandardIO.writeConnectionLostO   sz    !!"9: 	1b%00<

..0	1 	||D$6$6! %7|		1 	1rC   r   c                     | xj                   dz  c_         | j                   dk\  rAd| _        d| _        | j                  j	                  t        t        j                               y y )Nr   r   T)	connsLostr?   disconnectedr#   connectionLostr   r   CONNECTION_DONEr1   s    r   r=   zStandardIO.checkConnLostY   sN    !>>Q!%D $DJJ%%gd.B.B&CD r   c                 :    | j                   j                  |       y r6   )r.   writer7   s     r   rL   zStandardIO.writeb   s    $r   c                 X    | j                   j                  dj                  |             y )Nr   )r.   rL   join)r1   seqs     r   writeSequencezStandardIO.writeSequencee   s    #((3-(r   c                 z    d| _         | j                  j                          | j                  j                          y )NT)r?   r+   closer.   rJ   s    r   r@   zStandardIO.loseConnectionh   s*    !

r   c                     t               S r6   r   rJ   s    r   getPeerzStandardIO.getPeerm       !!r   c                     t               S r6   rT   rJ   s    r   getHostzStandardIO.getHostp   rV   r   c                 :    | j                   j                  ||      S r6   )r.   registerProducer)r1   producer	streamings      r   rZ   zStandardIO.registerProduceru   s    {{++Hi@@r   c                 6    | j                   j                         S r6   )r.   unregisterProducerrJ   s    r   r^   zStandardIO.unregisterProducerx   s    {{--//r   c                 8    | j                   j                          y r6   )r+   stopProducingrJ   s    r   r`   zStandardIO.stopProducing   s    

  "r   c                 8    | j                   j                          y r6   )r+   pauseProducingrJ   s    r   rb   zStandardIO.pauseProducing   s    

!!#r   c                 8    | j                   j                          y r6   )r+   resumeProducingrJ   s    r   rd   zStandardIO.resumeProducing   s    

""$r   r6   )r   r   r   r?   rG   r"   r)   r*   r-   rF   r=   rL   rP   r@   rU   rX   rZ   r^   r`   rb   rd   r   r   r   r   r   "   s`    ML(:&"" IE )
""
A0#
$%r   r   )__doc__r   r   zope.interfacer   r$   r   r   r   twisted.internet.interfacesr   r   r   r	   r
   twisted.loggerr   twisted.python.failurer   r:   r   r!   r   r   r   r   <module>rj      s   
  	 &  /  " *x X	 	 	 ZM2e%++ e% 3e%r   