
    kKj^                     Z    d Z ddlZddlZddlmZ ddlmZ ddlZddlm	Z	  G d de      Z
y)z<The client and server for a basic ping-pong style heartbeat.    N)Path)Thread)	localhostc                   Z    e Zd ZU dZdddddZd Zd Zd Zd Ze	dz  e
d	<   e	dz  e
d
<   y)	Heartbeatz9A simple ping-pong style heartbeat that runs in a thread.N)curve_publickeycurve_secretkeyc                v   |dt               df}t        j                  | d       || _        |\  | _        | _        | _        | j                  | _        || _        || _	        | j                  dk(  r| j                          | j
                  | j                  f| _        d| _        d| _        d| _        d| _        y)a  Initialize the heartbeat thread.

        Parameters
        ----------
        context : zmq.Context
        addr : tuple, optional
            (transport, ip, port)
        curve_publickey : bytes, optional
            CurveZMQ public key (Z85). When provided together with
            *curve_secretkey*, the heartbeat socket will operate as a
            CurveZMQ server so that only authenticated clients can connect.
        curve_secretkey : bytes, optional
            CurveZMQ secret key (Z85, paired with *curve_publickey*).
        Ntcpr   r   )nameT)r   r   __init__context	transportipportoriginal_port_curve_publickey_curve_secretkey	pick_portaddrdaemonpydev_do_not_traceis_pydev_daemon_threadr   )selfr   r   r   r	   s        d/Users/ahmed/devFolder/Ultron/claude-voice/.venv/lib/python3.12/site-packages/ipykernel/heartbeat.pyr   zHeartbeat.__init__   s     <9;*D;/-1*!YY / /"NNWWdii(	"&&*#	    c                 r   | j                   dk(  rvt        j                         }|j                  | j                  dk(  rdn| j                  df       |j	                         d   | _        |j                          | j
                  S | j                   dk(  rd| _        t        | j                   d| j
                         j                         rG| j
                  dz   | _        t        | j                   d| j
                         j                         rG| j
                  S t        d| j                   z        )	zPick a port for the heartbeat.r   * r      ipc-zUnrecognized zmq transport: %s)
r   socketbindr   getsocknamer   closer   exists
ValueError)r   ss     r   r   zHeartbeat.pick_port=   s    >>U"AFF$''S.Bdggq9:*DIGGI yy ^^u$DI$''!DII;/0779 IIM	 $''!DII;/0779 yy =NOOr   c                     | j                   dk(  rdnd}| j                  j                  | j                    d| j                   |z   t	        | j
                        z         S )Nr   :r"   z://)r   r#   r$   r   strr   )r   cs     r   _try_bind_socketzHeartbeat._try_bind_socketM   sO    >>U*C{{4>>"2#dggY ?! Cc$))n TUUr   c                    	 t         j                  }| j                  rdnd}t	        |      D ]  }	 | j                           y  y # t        $ r d }Y @w xY w# t        j                  $ ra}||dz
  k(  r |j                   t         j                  k7  r|j                   |k7  r | j                  dk(  r| j                          n Y d }~d }~ww xY w)Nr    d   r   )
errnoWSAEADDRINUSEAttributeErrorr   ranger.   zmqZMQError
EADDRINUSEr   )r   
win_in_usemax_attemptsattemptzes        r   _bind_socketzHeartbeat._bind_socketQ   s    	,,J !..qC\*G%%'  +  	J	 << 
lQ..88u///BHH
4J%%*NN$ %
s)   A AAAC
)ACC
c                    d| _         | j                  j                  t        j                        | _        d| j                  _        | j                  G| j                  | j                  _        | j                  | j                  _	        d| j                  _
        	 | j                          	 	 t        j                  t        j                  | j                  | j                         y# t        $ r | j                  j                           w xY w# t        j                   $ r}|j"                  t"        j$                  k(  rY d}~|j"                  t        j&                  k(  r:	 | j                  j                          n# t        j                   $ r Y nw xY wY d}~y|j"                  t        j(                  k(  rY d}~y d}~ww xY w)zRun the heartbeat thread.r   i  NT)r   r   r#   r5   ROUTERlingerr   r	   r   r   curve_serverr<   	Exceptionr&   deviceQUEUEr6   r1   EINTRETERMENOTSOCK)r   es     r   runzHeartbeat.runk   sK   	ll))#**5!  ,*.*?*?DKK'*.*?*?DKK''+DKK$	
 

399dkk4;;?& 3  	KK	 << 77ekk)77cii'))+<<   77cll*!sZ   C' -9D '%DG"F>F>"E=<F>=FF>FF>F>=F>>Gr   r   )N)__name__
__module____qualname____doc__r   r   r.   r<   rH   bytes__annotations__ r   r   r   r      s@    C dTX  > V4$L dl"dl"r   r   )rL   r1   r#   pathlibr   	threadingr   r5   jupyter_client.localinterfacesr   r   rO   r   r   <module>rS      s*    B     
 4w# w#r   