
    :jT
                        d Z ddlmZ ddlZddl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 d
ZdZdZdZdZ G d de          ZdS )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                  D     e Zd ZdZd fdZdd
ZddZddZddZ xZ	S )HeartbeatControllerr   returnNonec                    t                                          t          d           d| _        t	          j                    | _        t          j        t                    | _	        d S )NT)target_platformg        )
super__init__NS_HEARTBEAT	last_pingtime	last_ponglogging	getLogger__name__logger)self	__class__s    X/home/user/adhan/venv/lib/python3.11/site-packages/pychromecast/controllers/heartbeat.pyr   zHeartbeatController.__init__   sJ    t<<<'11    _messager   datadictboolc                   | j         t          | j         j        rdS |t                   t          k    rg	 | j                             t          | j        t          t          id           n/# t          $ r" | j         j
                            d           Y nw xY wdS |t                   t          k    r|                                  dS dS )z
        Called when a heartbeat message is received.

        data is message.payload_utf8 interpreted as a JSON dict.
        NT)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!   r%   r&   s      r#   receive_messagez#HeartbeatController.receive_message"   s     &))) 	4**#00+N!9-&*	 1     '   #*008     4**JJLLL4us   4A) ))BBc                    | j         t          t          j                    | _        	 |                     t
          t          i           dS # t          $ r# | j         j        	                    d           Y dS w xY w)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#   pingzHeartbeatController.pingD   s    &))	|Y788888 	 	 	&,,L     	s   !A )A87A8c                6    t          j                     | _        dS )zReset expired counter.N)r   r   r6   s    r#   r2   zHeartbeatController.resetQ   s    r$   c                    t          j                     | j        z
  t          k    r|                                  t          j                     | j        z
  t          t
          z   k    S )z$Indicates if connection has expired.)r   r   HB_PING_TIMEr7   r   HB_PONG_TIMEr6   s    r#   
is_expiredzHeartbeatController.is_expiredU   sD    9;;',66IIKKK	dn,|0KKKr$   )r   r   )r%   r   r&   r'   r   r(   )r   r(   )
r   
__module____qualname____doc__r   r3   r7   r2   r<   __classcell__)r"   s   @r#   r   r      s        ??2 2 2 2 2 2       D   % % % %L L L L L L L Lr$   r   )r?   
__future__r   r   r    r   constr   r	   r5   r
   r   r   generated.cast_channel_pb2r   r   r-   r0   r:   r;   r    r$   r#   <module>rF      s    ; ; " " " " " "         9 9 9 9 9 9 9 9 N N N N N N N N N N 5 4 4 4 4 48		AL AL AL AL AL. AL AL AL AL ALr$   