
    iT
                        S r SSKJr  SSKrSSKrSSKJr  SSKJrJ	r	  SSK
JrJrJr  SS	KJr  S
rSrSrSrSr " S S\5      rg)5Controller to send and respond to heartbeat messages.    )annotationsN   )BaseController   )MESSAGE_TYPEPLATFORM_DESTINATION_ID)ControllerNotRegisteredNotConnectedPyChromecastStopped)CastMessagez'urn:x-cast:com.google.cast.tp.heartbeatPINGPONG
   c                  X   ^  \ rS rSrSrS	U 4S jjrS
S jrS	S jrS	S jrSS jr	Sr
U =r$ )HeartbeatController   r   c                   > [         TU ]  [        SS9  SU l        [        R                  " 5       U l        [        R                  " [        5      U l	        g )NT)target_platformg        )
super__init__NS_HEARTBEAT	last_pingtime	last_ponglogging	getLogger__name__logger)self	__class__s    Y/home/sebas/venvs/catt/lib/python3.13/site-packages/pychromecast/controllers/heartbeat.pyr   HeartbeatController.__init__   s;    t<''1    c                   U R                   c  [        eU R                   R                  (       a  gU[           [        :X  a6   U R                   R                  [        U R                  [        [        0SS9  gU[           [        :X  a  U R                  5         gg! [         a(    U R                   R                  R                  S5         gf = f)zh
Called when a heartbeat message is received.

data is message.payload_utf8 interpreted as a JSON dict.
T)no_add_request_idzHHeartbeat error when sending response, Chromecast connection has stoppedF)_socket_clientr
   
is_stoppedr   	TYPE_PINGsend_messager	   	namespace	TYPE_PONGr   r   debugreset)r    _messagedatas      r"   receive_message#HeartbeatController.receive_message"   s     &))))*##00+NN!9-&*	 1  *JJL ' ##**008
 s   4B /CCc                    U R                   c  [        e[        R                  " 5       U l         U R	                  [
        [        05        g! [         a(    U R                   R                  R                  S5         gf = f)zSend a ping message.Nz:Chromecast is disconnected. Cannot ping until reconnected.)
r'   r
   r   r   r*   r   r)   r   r   errorr    s    r"   pingHeartbeatController.pingD   se    &))	|Y78 	&&,,L	s   A /A=<A=c                8    [         R                   " 5       U l        g)zReset expired counter.N)r   r   r5   s    r"   r.   HeartbeatController.resetQ   s    r$   c                    [         R                   " 5       U R                  -
  [        :  a  U R                  5         [         R                   " 5       U R                  -
  [        [
        -   :  $ )z$Indicates if connection has expired.)r   r   HB_PING_TIMEr6   r   HB_PONG_TIMEr5   s    r"   
is_expiredHeartbeatController.is_expiredU   sA    99;',6IIK		dnn,|0KKKr$   )r   r   r   )returnNone)r/   r   r0   dictr?   bool)r?   rB   )r   
__module____qualname____firstlineno____doc__r   r1   r6   r.   r=   __static_attributes____classcell__)r!   s   @r"   r   r      s'    ?2 D%L Lr$   r   )rF   
__future__r   r   r    r   constr   r	   r4   r
   r   r   generated.cast_channel_pb2r   r   r)   r,   r;   r<   r    r$   r"   <module>rN      sK    ; "    9 N N 58		AL. ALr$   