a
    ñ»jž  ã                   @   s‚  d dl Z d dlZd dlZd dlmZmZmZ ddlmZm	Z	 ddl
mZmZmZmZ ddlmZmZ ejejdfgZeedƒr’e ejejdf¡ eedƒr°e ejejd	f¡ eed
ƒrÎe ejejdf¡ eedƒrìe ejejdf¡ dag d¢ZG dd„ dƒZeeee f  ddœdd„Z!eeee f  dœdd„Z"ejee#dœdd„Z$eje#dœdd„Z%ejee#e&f edœdd„Z'dS ) é    N)ÚOptionalÚUnionÚAnyé   )Ú"WebSocketConnectionClosedExceptionÚWebSocketTimeoutException)ÚSSLErrorÚSSLEOFErrorÚSSLWantReadErrorÚSSLWantWriteError)Úextract_error_codeÚextract_err_messageÚSO_KEEPALIVEÚTCP_KEEPIDLEé   ÚTCP_KEEPINTVLé
   ÚTCP_KEEPCNTé   )ÚDEFAULT_SOCKET_OPTIONÚsock_optÚsetdefaulttimeoutÚgetdefaulttimeoutÚrecvÚ	recv_lineÚsendc                   @   s2   e Zd Zeee  eeeef  ddœdd„Z	dS )r   N)ÚsockoptÚssloptÚreturnc                 C   s.   |d u rg }|d u ri }|| _ || _d | _d S )N)r   r   Útimeout)Úselfr   r   © r!   ú7E:\soccer\ml_env\Lib\site-packages\websocket/_socket.pyÚ__init__8   s    zsock_opt.__init__)
Ú__name__Ú
__module__Ú__qualname__r   ÚlistÚtupleÚdictÚstrr   r#   r!   r!   r!   r"   r   7   s   þr   )r   r   c                 C   s   | a dS )zž
    Set the global timeout setting to connect.

    Parameters
    ----------
    timeout: int or float
        default socket timeout time (in seconds)
    N©Ú_default_timeout)r   r!   r!   r"   r   D   s    
r   ©r   c                   C   s   t S )zŸ
    Get default timeout

    Returns
    ----------
    _default_timeout: int or float
        Return the global timeout setting (in seconds) to connect.
    r+   r!   r!   r!   r"   r   Q   s    	r   )ÚsockÚbufsizer   c              
      sô   ˆst dƒ‚‡ ‡fdd„}z"ˆ ¡ dkr4ˆ ˆ ¡}n|ƒ }W n– tyV   tdƒ‚Y n~ tjyŠ } zt|ƒ}t|ƒ‚W Y d }~nRd }~0  tyÒ } z2t|ƒ}t	|t
ƒr¼d|v r¼t|ƒ‚n‚ W Y d }~n
d }~0 0 |d u rät dƒ‚|sðt dƒ‚|S )Núsocket is already closed.c               
      s¤   zˆ  ˆ ¡W S  ty   Y n@ tjy\ }  z&t| ƒ}|tjtjfvrH‚ W Y d } ~ n
d } ~ 0 0 t 	¡ }| 
ˆtj¡ | ˆ ¡ ¡}| ¡  |r˜ˆ  ˆ ¡S tdƒ‚d S )Nz%Connection timed out waiting for data)r   r
   ÚsocketÚerrorr   ÚerrnoÚEAGAINÚEWOULDBLOCKÚ	selectorsÚDefaultSelectorÚregisterÚ
EVENT_READÚselectÚ
gettimeoutÚcloser   )ÚexcÚ
error_codeÚselÚr©r/   r.   r!   r"   Ú_recva   s    
zrecv.<locals>._recvr   zConnection timed outú	timed outz#Connection to remote host was lost.)r   r;   r   ÚTimeoutErrorr   r1   r   r   r   Ú
isinstancer*   )r.   r/   rB   Úbytes_ÚeÚmessager!   rA   r"   r   ]   s,    

r   )r.   r   c                 C   s.   g }t | dƒ}| |¡ |dkrq$qd |¡S )Nr   ó   
ó    )r   ÚappendÚjoin)r.   ÚlineÚcr!   r!   r"   r   ”   s    

r   )r.   Údatar   c              
      sà   t ˆ tƒrˆ  d¡‰ ˆs tdƒ‚tdœ‡ ‡fdd„}z$ˆ ¡ dkrNˆ ˆ ¡W S |ƒ W S W n‚ tjyŽ } zt	|ƒ}t
|ƒ‚W Y d }~nVd }~0  ttfyÚ } z2t	|ƒ}t |tƒrÄd|v rÄt
|ƒ‚n‚ W Y d }~n
d }~0 0 d S )Nzutf-8r0   r-   c               
      s¾   zˆ  ˆ ¡W S  ty&   tdƒ‚Y nZ ty6   Y nJ tjy~ }  z0t| ƒ}|d u rX‚ |tjtj	fvrj‚ W Y d } ~ n
d } ~ 0 0 t
 ¡ }| ˆt
j¡ | ˆ ¡ ¡}| ¡  |rºˆ  ˆ ¡S dS )Nr0   r   )r   r	   r   r   r1   r2   r   r3   r4   r5   r6   r7   r8   ÚEVENT_WRITEr:   r;   r<   )r=   r>   r?   Úw©rO   r.   r!   r"   Ú_send¥   s&    
zsend.<locals>._sendr   rC   )rE   r*   Úencoder   Úintr;   r   r1   r   r   r   ÚOSErrorr   )r.   rO   rS   rG   rH   r!   rR   r"   r   ž   s"    


r   )(r3   r6   r1   Útypingr   r   r   Ú_exceptionsr   r   Z_ssl_compatr   r	   r
   r   Z_utilsr   r   ÚSOL_TCPÚTCP_NODELAYr   ÚhasattrrK   Ú
SOL_SOCKETr   r   r   r   r,   Ú__all__r   rU   Úfloatr   r   Úbytesr   r   r*   r   r!   r!   r!   r"   Ú<module>   s.   



7
