o
    Rh                     @  s   d dl mZ 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mZ ddlmZmZ ejd	ks9er9J d
ZG dd dZeG dd de	ZeG dd deZdS )    )annotationsN)TYPE_CHECKING   )_core)ReceiveStream
SendStream)_handlekernel32raise_winerror)ConflictDetectorfinalwin32i   c                   @  s8   e Zd ZdddZeddd	Zdd
dZdddZdS )_HandleHolderhandleintreturnNonec                 C  s.   d| _ t|tstd|| _ t| j  d S )Nzhandle must be an int)r   
isinstancer   	TypeErrorr   register_with_iocpselfr    r   U/home/air/sanwanet/backup_V2/venv/lib/python3.10/site-packages/trio/_windows_pipes.py__init__   s
   
z_HandleHolder.__init__boolc                 C  s
   | j dkS Nr   )r   r   r   r   r   closed   s   
z_HandleHolder.closedc                 C  s2   | j rd S | j}d| _tt|st  d S d S r   )r   r   r	   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__Nr   r   r   r   )r   r   r   r   )__name__
__module____qualname__r   propertyr   r!   r#   r   r   r   r   r      s    

r   c                   @  sB   e Zd ZdZdddZdd
dZdddZdddZdddZdS )PipeSendStreamzdRepresents a send stream over a Windows named pipe that has been
    opened in OVERLAPPED mode.
    r   r   r   r   c                 C     t || _td| _d S Nz)another task is currently using this piper   _handle_holderr   _conflict_detectorr   r   r   r   r   1      

zPipeSendStream.__init__databytesc                   s   | j 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	|d }~ww |t
|ksFJ W d    d S 1 sQw   Y  d S )Nthis pipe is already closed)r/   r.   r   r   ClosedResourceError
checkpointwrite_overlappedr   BrokenPipeErrorBrokenResourceErrorlen)r   r1   writtenexr   r   r   send_all7   s    
"zPipeSendStream.send_allc                   sN   | j  | jjrtdt I d H  W d    d S 1 s w   Y  d S )NzThis pipe is already closed)r/   r.   r   r   r4   r5   r   r   r   r   wait_send_all_might_not_blockI   s   
"z,PipeSendStream.wait_send_all_might_not_blockc                 C     | j   d S r"   r.   r!   r   r   r   r   r!   Q      zPipeSendStream.closec                      |    t I d H  d S r"   r!   r   r5   r   r   r   r   acloseT      zPipeSendStream.acloseNr$   )r1   r2   r   r   r%   )	r&   r'   r(   __doc__r   r<   r=   r!   rC   r   r   r   r   r*   +   s    



r*   c                   @  s:   e Zd ZdZdddZddddZdddZdddZdS )PipeReceiveStreamz3Represents a receive stream over an os.pipe object.r   r   r   r   c                 C  r+   r,   r-   r   r   r   r   r   ]   r0   zPipeReceiveStream.__init__N	max_bytes
int | Noner2   c              	     s   | j c | jjrtd|d u rt}nt|tstd|dk r&t	dt
|}zt| jj|I d H }W n! tyX   | jjrHtdd t I d H  Y W d    dS w ||d = |W  d    S 1 sjw   Y  d S )Nr3   zmax_bytes must be integer >= 1r   zanother task closed this pipe    )r/   r.   r   r   r4   DEFAULT_RECEIVE_SIZEr   r   r   
ValueError	bytearrayreadinto_overlappedr   r7   r5   )r   rG   buffersizer   r   r   receive_somec   s<   


$zPipeReceiveStream.receive_somec                 C  r>   r"   r?   r   r   r   r   r!      r@   zPipeReceiveStream.closec                   rA   r"   rB   r   r   r   r   rC      rD   zPipeReceiveStream.acloser$   r"   )rG   rH   r   r2   r%   )r&   r'   r(   rE   r   rP   r!   rC   r   r   r   r   rF   Y   s    

(rF   )
__future__r   systypingr    r   _abcr   r   _core._windows_cffir   r	   r
   _utilr   r   platformrJ   r   r*   rF   r   r   r   r   <module>   s    -