o
    zsg                     @   sl   d dl Z d dlZd dlmZmZmZmZmZ ddlm	Z	m
Z
mZ er(ddlmZ eeZG dd dZdS )	    N)TYPE_CHECKINGAnyDictListOptional   )DEFAULT_TIMEOUTCallback_Hook   )AsyncRealtimeChannelc                
   @   s   e Zd Zdefdddedeeeef  defddZ	d	d
 Z
dd Zdeeef fddZdededd fddZdd ZdedefddZdd Zdd Zdd Zdedefdd Zdefd!d"ZdS )#	AsyncPushNchannelr   eventpayloadtimeoutc                 C   sD   || _ || _|p	i | _|| _g | _d | _d | _d | _d| _d | _	d S )NF)
r   r   r   r   	rec_hooksref	ref_eventreceived_respsenttimeout_task)selfr   r   r   r    r   P/var/www/html/minecraft/env/lib/python3.10/site-packages/realtime/_async/push.py__init__   s   

zAsyncPush.__init__c                    s4   |    d| _d | _d | _d| _|  I d H  d S )N F)_cancel_ref_eventr   r   r   r   sendr   r   r   r   resend    s   zAsyncPush.resendc              
      s   |  drd S |   d| _z| jj| jj| j| j| j	| jj
j	dI d H  W d S  tyE } ztd|  W Y d }~d S d }~ww )Nr   T)topicr   r   r   join_refzsend push failed: )_has_receivedstart_timeoutr   r   socketr   r!   r   r   r   	join_push	Exceptionloggererror)r   er   r   r   r   (   s$   
	zAsyncPush.sendc                 C   s   i | j || _ d S N)r   )r   r   r   r   r   update_payload<   s   zAsyncPush.update_payloadstatuscallbackreturnc                 C   s2   |  |r|| jdi  | jt|| | S )Nresponse)r#   r   getr   appendr
   )r   r-   r.   r   r   r   receive?   s   
zAsyncPush.receivec                    s`    j rd S  jj  _ j j _ fdd} j j| dd }t	|  _ d S )Nc                    s,          |  _ jdi  j d S )Nr   )r   _cancel_timeoutr   _match_receive)r   argsr   r   r   on_replyM   s   z)AsyncPush.start_timeout.<locals>.on_replyc                    s$   t | jI d H  | di  d S )Nr   )asynciosleepr   triggerr   r   r   r   r   U   s   z(AsyncPush.start_timeout.<locals>.timeout)
r   r   r%   	_make_refr   _reply_event_namer   _onr8   create_task)r   r7   r   r   r   r   r$   F   s   zAsyncPush.start_timeoutr0   c                 C   s(   | j r||d}| j| j | d S d S )N)r-   r0   )r   r   _trigger)r   r-   r0   r   r   r   r   r:   [   s   zAsyncPush.triggerc                 C   s   |    |   d S r+   )r   r4   r   r   r   r   destroyc   s   zAsyncPush.destroyc                 C   s   | j sd S | j| j i  d S r+   )r   r   _offr   r   r   r   r   g   s   zAsyncPush._cancel_ref_eventc                 C   s   | j sd S | j   d | _ d S r+   )r   cancelr   r   r   r   r4   m   s   

zAsyncPush._cancel_timeoutc                 C   s$   | j D ]}|j|kr|| qd S r+   )r   r-   r.   )r   r-   r0   hookr   r   r   r5   t   s
   


zAsyncPush._match_receivec                 C   s   | j o
| j d|kS )Nr-   )r   r1   )r   r-   r   r   r   r#   y   s   zAsyncPush._has_received)__name__
__module____qualname__r   strr   r   r   intr   r    r   r,   r	   r3   r$   r:   r@   r   r4   r5   r#   r   r   r   r   r      s.    
r   )r8   loggingtypingr   r   r   r   r   typesr   r	   r
   r   r   	getLoggerrD   r(   r   r   r   r   r   <module>   s    
