a
    ‘·Df  ã                   @   sX   d Z ddlZddlZddlZddlZddlmZ ejZej	 Z	Z
dZG dd„ deƒZdS )z&
ppft auto: an auto-discovery service
é    Né   )Úcommoné
   c                   @   s2   e Zd ZdZddd„Zdd„ Zdd„ Zd	d
„ ZdS )ÚDiscoverzAuto-discovery service classFc                 C   s   || _ g | _|| _d S )N)ÚbaseÚhostsÚisclient)Úselfr   r   © r
   úV/nfs/NAS7/SABIOD/METHODE/ermites/ermites_venv/lib/python3.9/site-packages/ppft/auto.pyÚ__init__1   s    zDiscover.__init__c                 C   sr   || _ || _t tjtj¡| _| j tjtjd¡ | j tjtj	d¡ z|  
¡  W n   tjt ¡ Ž  Y n0 dS )zStarts auto-discoveryr   N)Úinterface_addrÚbroadcast_addrÚsocketÚAF_INETÚ
SOCK_DGRAMÚbsocketÚ
setsockoptÚ
SOL_SOCKETÚSO_REUSEADDRÚSO_BROADCASTÚlistenÚsysÚ
excepthookÚexc_info)r	   r   r   r
   r
   r   Úrun6   s    zDiscover.runc                 C   sx   | j r2| jj d| j ¡ | j t d¡| j¡ nB| jj	r>dS | jj d| j ¡ | j t d¡| j¡ t
 t¡ q2dS )zSends a broadcastz*Client sends initial broadcast to (%s, %i)ÚCNz"Server sends broadcast to (%s, %i)ÚS)r   r   ÚloggerÚdebugr   r   ÚsendtoÚppcÚb_Ú_exitingÚtimeÚsleepÚBROADCAST_INTERVAL)r	   r
   r
   r   Ú	broadcastC   s    
ÿ
ÿzDiscover.broadcastc                 C   s¾  | j j d| j ¡ t tjtj¡| _| j tjtj	d¡ | j tjtj
d¡ | j d¡ | j | j¡ t d| j¡ z| j jrˆW dS | j d¡\}\}}t |¡}|| jd f}|d t| jd ƒ }| j j d||d	 f  ¡ | j j |d	¡s8| jr8|d	 d
kr8| j j d|f ¡ t d| j j|d ¡ | jsx|d	 dkrx| j j d|f ¡ | j t d
¡| j¡ W qv tjy   Y qv   | j j d¡ tjt  ¡ Ž  Y qv0 qvdS )z1Listens for broadcasts from other clients/serverszListening (%s, %i)r   é   r'   Ni   ú:z#Discovered host (%s, %i) message=%cr   r   zConnecting to host %sZppauto_connect1)Fr   zReplying to host %sz8An error has occured during execution of Discover.listen)!r   r   r   r   r   r   r   r   r   r   r   Ú
settimeoutÚbindr!   Zstart_threadr'   r#   ÚrecvfromZstr_r   ÚstrZautopp_listÚgetr   Zconnect1r   r    r"   ÚtimeoutÚerrorr   r   r   )r	   ÚmessageÚhostÚportZremote_addressZhostidr
   r
   r   r   S   s@    

ÿ
ÿÿzDiscover.listenN)F)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r'   r   r
   r
   r
   r   r   .   s
   
r   )r7   r   r   r$   Ú	threadingÚ r   r!   Ú	copyrightÚ__version__Úversionr&   Úobjectr   r
   r
   r
   r   Ú<module>   s   
