a
    xd                     @   s   d dl Z d dlmZ ddlmZ ddlmZmZ ddlm	Z	m
Z
 ddlmZmZmZmZ e jdksjerjJ d	ZG d
d dZG dd dee
dZG dd dee
dZdS )    N)TYPE_CHECKING   )_core)
SendStreamReceiveStream)ConflictDetectorFinal)_handleraise_winerrorkernel32ffiwin32i   c                   @   s8   e Zd ZeddddZedd Zdd Zd	d
 ZdS )_HandleHolderNhandlereturnc                 C   s.   d| _ t|tstd|| _ t| j  d S )Nzhandle must be an int)r   
isinstanceint	TypeErrorr   Zregister_with_iocpselfr    r   K/var/www/html/Ranjet/env/lib/python3.9/site-packages/trio/_windows_pipes.py__init__   s
    
z_HandleHolder.__init__c                 C   s
   | j dkS Nr   )r   r   r   r   r   closed   s    z_HandleHolder.closedc                 C   s.   | j r
d S | j}d| _tt|s*t  d S r   )r   r   r   ZCloseHandler	   r
   r   r   r   r   close   s    z_HandleHolder.closec                 C   s   |    d S N)r   r   r   r   r   __del__$   s    z_HandleHolder.__del__)	__name__
__module____qualname__r   r   propertyr   r   r    r   r   r   r   r      s
   
r   c                   @   sL   e Zd ZdZeddddZedddZdd	d
dZdd Z	dd Z
dS )PipeSendStreamzdRepresents a send stream over a Windows named pipe that has been
    opened in OVERLAPPED mode.
    Nr   c                 C   s   t || _td| _d S Nz)another task is currently using this piper   _handle_holderr   _conflict_detectorr   r   r   r   r   -   s    
zPipeSendStream.__init__)datac                    s   | j  | jjrtd|s<t I d H  W d    d S zt| jj|I d H }W n, ty } ztj	|W Y d }~n
d }~0 0 |t
|ksJ W d    n1 s0    Y  d S )Nthis pipe is already closed)r)   r(   r   r   ClosedResourceError
checkpointZwrite_overlappedr   BrokenPipeErrorZBrokenResourceErrorlen)r   r*   Zwrittenexr   r   r   send_all3   s    
zPipeSendStream.send_allr   c                    sJ   | j 0 | jjrtdt I d H  W d    n1 s<0    Y  d S )NzThis pipe is already closed)r)   r(   r   r   r,   r-   r   r   r   r   wait_send_all_might_not_blockE   s    
z,PipeSendStream.wait_send_all_might_not_blockc                 C   s   | j   d S r   r(   r   r   r   r   r   r   M   s    zPipeSendStream.closec                    s   |    t I d H  d S r   r   r   r-   r   r   r   r   acloseP   s    zPipeSendStream.aclose)r!   r"   r#   __doc__r   r   bytesr1   r3   r   r6   r   r   r   r   r%   (   s   r%   )	metaclassc                   @   s@   e Zd ZdZeddddZdedddZd	d
 Zdd Z	dS )PipeReceiveStreamz3Represents a receive stream over an os.pipe object.Nr   c                 C   s   t || _td| _d S r&   r'   r   r   r   r   r   X   s    
zPipeReceiveStream.__init__r2   c              	      s   | j  | jjrtd|d u r(t}n"t|ts:td|dk rJt	dt
|}zt| jj|I d H }W nB ty   | jjrtdd t I d H  Y W d    dS 0 ||d = |W  d    S W d    n1 s0    Y  d S )Nr+   zmax_bytes must be integer >= 1r   zanother task closed this pipe    )r)   r(   r   r   r,   DEFAULT_RECEIVE_SIZEr   r   r   
ValueError	bytearrayZreadinto_overlappedr   r.   r-   )r   Z	max_bytesbuffersizer   r   r   receive_some^   s2    


zPipeReceiveStream.receive_somec                 C   s   | j   d S r   r4   r   r   r   r   r      s    zPipeReceiveStream.closec                    s   |    t I d H  d S r   r5   r   r   r   r   r6      s    zPipeReceiveStream.aclose)N)
r!   r"   r#   r7   r   r   r8   rA   r   r6   r   r   r   r   r:   U   s
   'r:   )systypingr    r   _abcr   r   Z_utilr   r   Z_core._windows_cffir	   r
   r   r   platformr<   r   r%   r:   r   r   r   r   <module>   s   -