o
    nYi)                     @   s   d dl Z d dlZd dlZd dlZd dlZd dlmZ d dlmZ d dl	m
Z
 d dlmZ d dlmZmZmZ ddlmZ dd	lmZ dd
lmZ ddlmZ ddlmZ ddlmZmZ G dd dZdS )    N)uuid4)
Connection)Connect)Ping)register
unregistertrigger   )setup_protocol)Calling)Tasking)	Messaging)handle_inbound_message)	ConstantsWebSocketEventsc                   @   s   e Zd ZdZejefddZedd Z	edd Z
edd	 Zed
d Zdd Zdd Zdd Zdd Zdd Zd-ddZdd Zdd Zdd Zdd  Zd!d" Zd#d$ Zd%d& Zd'd( Zd)d* Zd+d, ZdS ).Client
   c                 C   s   t  | _|| _|| _|| _|   || | _tt	 | _
d| _d | _d | _d | _g | _d | _d | _d | _i | _d| _t  | _d | _tdd }tj|d d S )NTF	LOG_LEVELINFO)level)asyncioget_event_looploophostprojecttokenattach_signals
connectionstrr   uuid
_reconnect
session_id	signatureprotocolcontexts_calling_tasking
_messaging	_requests_idleQueue_executeQueue_pingIntervalosgetenvupperloggingbasicConfig)selfr   r   r   r   	log_level r4   [/var/www/html/asistente-voz-ia/venv/lib/python3.10/site-packages/signalwire/relay/client.py__init__   s*   


zClient.__init__c                 C   s   | j jS N)r   	connectedr2   r4   r4   r5   r8   ,   s   zClient.connectedc                 C      | j d u r
t| | _ | j S r7   )r%   r   r9   r4   r4   r5   calling0      

zClient.callingc                 C   r:   r7   )r&   r   r9   r4   r4   r5   tasking6   r<   zClient.taskingc                 C   r:   r7   )r'   r   r9   r4   r4   r5   	messaging<   r<   zClient.messagingc                    sz   |j | jvr| j | j|j < | jdks| jdkr$| j|I d H  n	| j	|I d H  | j|j  I d H }| j|j = |S )NTF)
idr(   r   create_futurer)   r8   r+   putr   send)r2   messageresultr4   r4   r5   executeB   s   
zClient.executec                 C   s$   | j r| j|   | j sd S d S r7   )r    r   run_until_complete_connectr9   r4   r4   r5   connectN   s   zClient.connectc              
      s   z| j  I d H  t|   | j  I d H  |   W n& tjj	yD } zt
tj|| jd t| j d W Y d }~nd }~ww ztd tdI d H  W d S  tjy`   Y d S w )Nsuffixz seems down..zConnection closed..   )r   rH   r   create_taskon_socket_openreadon_socket_closeaiohttpclient_exceptionsClientConnectorErrorr   r   ERRORr   r0   warnr   infosleepCancelledError)r2   errorr4   r4   r5   rG   R   s"   
zClient._connectc                    sN   t d d| _d| _| j I d H  |  I d H  t d | j  d S )NzDisconnection..TFzBye bye!)	r0   rU   r)   r    r   closecancel_pending_tasksr   stopr9   r4   r4   r5   
disconnecta   s   

zClient.disconnectc                 C      t ||| jd | S N)eventcallbackrJ   )r   r   r2   r_   r`   r4   r4   r5   onj      z	Client.onNc                 C   r]   r^   )r   r   ra   r4   r4   r5   offn   rc   z
Client.offc                    sR   dd t  D }tdt| d dd |D  t j|ddiI d H  d S )Nc                 S   s   g | ]
}|t  ur|qS r4   )r   current_task).0tr4   r4   r5   
<listcomp>s   s    z/Client.cancel_pending_tasks.<locals>.<listcomp>zCancelling z outstanding tasks..c                 S   s   g | ]}|  qS r4   )cancel)rf   taskr4   r4   r5   rh   u   s    return_exceptionsT)r   	all_tasksr0   rU   lengather)r2   tasksr4   r4   r5   rZ   r   s
   zClient.cancel_pending_tasksc                 C   s   t |   d S r7   )r   rL   r\   r9   r4   r4   r5   handle_signalx   s   zClient.handle_signalc                 C   s2   dD ]}z| j tt|| j W q   Y qd S )N)SIGHUPSIGTERMSIGINT)r   add_signal_handlergetattrsignalrp   )r2   sr4   r4   r5   r   {   s   zClient.attach_signalsc                 C   s*   | j r| j   g | _ttj| jd d S )NrI   )r,   ri   r$   r   r   CLOSEr   r9   r4   r4   r5   rO      s   
zClient.on_socket_closec              
      s   zLd| _ ttj| jd | t| j| jdI d H }|d | _	|d d | _
t| I d H | _|  I d H  d| _|   td ttj| | jd W d S  tyr } ztd	t| | j I d H  W Y d }~d S d }~ww )
NFrI   )r   r   	sessionidauthorizationr"   TzClient connected!zClient setup error: {0})r)   r   r   OPENr   rE   r   r   r   r!   r"   r
   r#   _clearExecuteQueue_pong	keepaliver0   rU   r   READY	ExceptionrX   formatr   r   rY   )r2   rD   rX   r4   r4   r5   rM      s$   

zClient.on_socket_openc                    s0    fdd}t |   j j j _d S )Nc                      s>    j du r j I d H S d _  t I d H  d _ d S )NFT)r}   r   rY   rE   r   r4   r9   r4   r5   	send_ping   s   

z#Client.keepalive.<locals>.send_ping)r   rL   r   
call_later
PING_DELAYr~   r,   )r2   r   r4   r9   r5   r~      s   zClient.keepalivec                    s0   	 | j  r	d S | j  }t| j| qr7   )r+   empty
get_nowaitr   rL   r   rB   )r2   rC   r4   r4   r5   r|      s   

zClient._clearExecuteQueuec                 C   s   t tj|| jd |j| jvrt| |S t|dr#| |j|j	 d S t|dr\z!|j
d d dkr=| |j|j
 W d S | |j|j
d  W d S  ty[   | |j|j
 Y d S w d S )NrI   rX   rD   code200)r   r   MESSAGEr   r?   r(   r   hasattr_set_exceptionrX   rD   _set_resultKeyError)r2   msgr4   r4   r5   message_handler   s   


zClient.message_handlerc                 C   s   | j | | d S r7   )r(   
set_result)r2   r   rD   r4   r4   r5   r      s   zClient._set_resultc                 C   s   | j | t|d  d S )NrC   )r(   set_exceptionr   )r2   r   rX   r4   r4   r5   r      s   zClient._set_exceptionr7   )__name__
__module____qualname__r   r   HOSTr   r6   propertyr8   r;   r=   r>   rE   rH   rG   r\   rb   rd   rZ   rp   r   rO   rM   r~   r|   r   r   r   r4   r4   r4   r5   r      s6    



	

r   )r-   r   r0   rv   rP   r   r   signalwire.blade.connectionr   !signalwire.blade.messages.connectr   signalwire.blade.messages.pingr   signalwire.blade.handlerr   r   r   helpersr
   r;   r   r=   r   r>   r   r   r   	constantsr   r   r   r4   r4   r4   r5   <module>   s"    