
    	h                    `   U d dl mZ d dlZ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mZmZmZmZmZmZ ej        dk    rd d	lmZmZmZ n
d d	lmZmZmZ d d
lmZ d dl m!c m"Z! d dl#m$Z$ ddl%m&Z&m'Z'm(Z( ddlm)Z)m*Z*  ej+        d          Z,e,-                    ej.                   dZ/de0d<   dZ1de0d<    G d de          Z2 ed           G d d                      Z3 ed           G d d                      Z4 G d d          Z5dZ6de0d <   d!Z7de0d"<    ed#          Z8d:d'Z9 ed           G d( d)                      Z:d*Z;de0d+<    ed           G d, d-e:                      Z<d.Z=de0d/<    G d0 d1          Z> G d2 d3          Z?d;d9Z@dS )<    )annotationsN)contextmanager)	dataclass)IntEnum)TracebackType)	AnyAsyncGenerator	AwaitableCallable	Coroutine	GeneratorIterableIteratorcast)   
   )Concatenate	ParamSpec	TypeAlias)asynccontextmanager)
Properties   )MqttCodeErrorMqttConnectError	MqttError)PayloadTypeTmqttz;socket.socket | ssl.SSLSocket | mqtt.WebsocketWrapper | Anyr   _PahoSocketz;dict[str, str] | Callable[[dict[str, str]], dict[str, str]]WebSocketHeadersc                  <    e Zd ZdZej        Zej        Zej	        Z
dS )ProtocolVersionzJA mapping of paho-mqtt protocol versions to an Enum for use in type hints.N)__name__
__module____qualname____doc__r   MQTTv31V31MQTTv311V311MQTTv5V5     `/var/www/html/web-builder-api.evdpl.com/venv/lib/python3.11/site-packages/asyncio_mqtt/client.pyr"   r"   1   s)        TT
,C=D	BBBr.   r"   T)frozenc                  R    e Zd ZU ded<   dZded<   dZded<   d	Zd
ed<   dZded<   dS )WillstrtopicNzPayloadType | Nonepayloadr   intqosFboolretainmqtt.Properties | None
properties)r#   r$   r%   __annotations__r5   r7   r9   r;   r-   r.   r/   r2   r2   9   s[         JJJ"&G&&&&CLLLLF)-J------r.   r2   c                  r    e Zd ZU dZded<   dZded<   dZded<   dZded<   dZded	<   dZ	ded
<   dZ
ded<   dS )TLSParametersN
str | Noneca_certscertfilekeyfilezssl.VerifyMode | None	cert_reqsz
Any | Nonetls_versioncipherskeyfile_password)r#   r$   r%   r@   r<   rA   rB   rC   rD   rE   rF   r-   r.   r/   r>   r>   C   s         HHG'+I++++"K""""G#'''''''r.   r>   c                       e Zd ZddddddZdS )ProxySettingsTN)
proxy_rdnsproxy_usernameproxy_password
proxy_typer6   
proxy_addrr3   rI   bool | NonerJ   r?   rK   c                    |||||d| _         d S )N)rL   rM   rI   rJ   rK   )
proxy_args)selfrL   rM   rI   rJ   rK   s         r/   __init__zProxySettings.__init__P   s%     %$$,,
 
r.   )
rL   r6   rM   r3   rI   rN   rJ   r?   rK   r?   )r#   r$   r%   rR   r-   r.   r/   rH   rH   O   s=         #'%)%)
 
 
 
 
 
 
 
r.   rH   z9tuple[int, int, int | bytes] | tuple[int, int, None, int]SocketOptionzistr | tuple[str, mqtt.SubscribeOptions] | list[tuple[str, mqtt.SubscribeOptions]] | list[tuple[str, int]]SubscribeTopicPmethod8Callable[Concatenate[Client, P], Coroutine[Any, Any, T]]returnc                H     t          j                   d
 fd	            }|S )NrQ   ClientargsP.argskwargsP.kwargsrX   r   c                   K   | j         s | g|R i | d {V S | j         4 d {V   | g|R i | d {V cd d d           d {V  S # 1 d {V swxY w Y   d S N)_outgoing_calls_sem)rQ   r[   r]   rV   s      r/   	decoratedz!_outgoing_call.<locals>.decoratedo   s:     ' 	76t666v666666666+ 	7 	7 	7 	7 	7 	7 	7 	76t666v66666666	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7s   A
AA)rQ   rZ   r[   r\   r]   r^   rX   r   )	functoolswraps)rV   rb   s   ` r/   _outgoing_callre   l   s@     _V7 7 7 7 7 7 r.   c                  .    e Zd ZU dZded<   d	dZd
dZdS )WildcardzHA topic, optionally with wildcards (+ and #). Can only be subscribed to.r3   valuerX   c                    | j         S r`   )rh   rQ   s    r/   __str__zWildcard.__str__   s
    zr.   Nonec                Z   t          | j        t                    st          d          t	          | j                  dk    sRt	          | j                  dk    s:d| j        v s1t          d | j                            d          D                       rt          d| j                   dS )	zValidate the wildcard.zwildcard must be a stringr     z#/c              3  L   K   | ]}t          |          d k    d|v pd|v V   dS )r   +#N)len).0levels     r/   	<genexpr>z)Wildcard.__post_init__.<locals>.<genexpr>   sG        u::>> u,u!>>> r.   /zInvalid wildcard: N)
isinstancerh   r3   	TypeErrorrr   anysplit
ValueErrorrj   s    r/   __post_init__zWildcard.__post_init__   s    $*c** 	97888
OOq  4:&&tz!!  !Z--c22     " >$*>>??? "!r.   NrX   r3   rX   rl   )r#   r$   r%   r&   r<   rk   r|   r-   r.   r/   rg   rg   z   sS         RRJJJ   @ @ @ @ @ @r.   rg   zstr | WildcardWildcardLikec                  "    e Zd ZdZd
dZddZd	S )Topicz0A topic that can be published and subscribed to.rX   rl   c                
   t          | j        t                    st          d          t	          | j                  dk    s*t	          | j                  dk    sd| j        v s	d| j        v rt          d| j                   dS )zValidate the topic.ztopic must be a stringr   rn   rp   rq   zInvalid topic: N)rw   rh   r3   rx   rr   r{   rj   s    r/   r|   zTopic.__post_init__   s    $*c** 	64555
OOq  4:&&dj  dj  ;tz;;<<< ! r.   wildcardr   r8   c                   t          |t                    st          |          }| j                            d          }t	          |                              d          }|d         dk    r
|dd         }dfd ||          S )z2Check if the topic is matched by a given wildcard.rv   r   z$share   Nx	list[str]yrX   r8   c                    | s|sdS dS |sdS |d         dk    rdS | d         |d         k    s|d         dk    r | dd          |dd                    S dS )NTFr   rq   rp   r   r-   )r   r   recurses     r/   r   zTopic.matches.<locals>.recurse   s       4u uts{{ttqt||qts{{wquae,,,5r.   )r   r   r   r   rX   r8   )rw   rg   rh   rz   r3   )rQ   r   topic_levelswildcard_levelsr   s       @r/   matcheszTopic.matches   s    (H-- 	*))Hz'',,h----c221))-abb1O	 	 	 	 	 	 w|_555r.   Nr~   )r   r   rX   r8   )r#   r$   r%   r&   r|   r   r-   r.   r/   r   r      sB        ::
= 
= 
= 
=6 6 6 6 6 6r.   r   zstr | Topic	TopicLikec                  2    e Zd ZdZddZedd            ZdS )Messagez?Custom message class that allows us to use our own Topic class.r4   r   r5   r   r7   r6   r9   r8   midr;   Properties | Nonec                    t          |t                    st          |          n|| _        || _        || _        || _        || _        || _        d S r`   )rw   r   r4   r5   r7   r9   r   r;   )rQ   r4   r5   r7   r9   r   r;   s          r/   rR   zMessage.__init__   sK     *4E5)A)ALU5\\\u
$r.   messagemqtt.MQTTMessagerX   c                     | |j         |j        |j        |j        |j        t          |d          r|j        nd           S )Nr;   )r4   r5   r7   r9   r   r;   )r4   r5   r7   r9   r   hasattrr;   )clsr   s     r/   _from_paho_messagezMessage._from_paho_message   sO    s-O>-4Wl-K-KUw))QU
 
 
 	
r.   N)r4   r   r5   r   r7   r6   r9   r8   r   r6   r;   r   )r   r   rX   r   )r#   r$   r%   r&   rR   classmethodr   r-   r.   r/   r   r      sN        II% % % %  
 
 
 [
 
 
r.   r   c                  &   e Zd Z	 dddddddddddddddej        ddddddddd.Zedd0            Zedd2            Zd3d4dd7Z	d3d4dd8Z
dd9Ze	 	 	 dd3d4ddC            Ze	 dd3d4ddE            Ze	 	 	 	 dd3d4ddK            ZeddLddP            ZeddLddQ            ZeddLddS            ZddLddVZddLddXZdd]Zeddc            Z	 dddlZ	 dddnZ	 dddpZ	 	 dddsZddvZddwZddzZdd{Z dd|Z!dd}Z"dd~Z#ddZ$ddZ%dS )rZ   [  Ntcp<    r      )usernamepasswordlogger	client_idtls_context
tls_paramsproxyprotocolwillclean_session	transport	keepalivebind_address	bind_portclean_startr;   message_retry_setsocket_optionsmax_concurrent_outgoing_callswebsocket_pathwebsocket_headershostnamer3   portr6   r   r?   r   r   logging.Logger | Noner   r   ssl.SSLContext | Noner   TLSParameters | Noner   ProxySettings | Noner   ProtocolVersion | Noner   Will | Noner   rN   r   r   r   r   r   r;   r   r   r   Iterable[SocketOption] | Noner   
int | Noner   r   WebSocketHeaders | Nonec          	        || _         || _        || _        || _        || _        || _        || _        t          j                    | _	        t          j
                    | _        t          j
                    | _        i | _        i | _        i | _        d| _        d | _        g | _        d | _        |  |t          j        |          | _        nd | _        |
t,          j        }
t1          j        ||
||d          | _        | j        | j        _        | j        | j        _        | j        | j        _         | j!        | j        _"        | j#        | j        _$        | j%        | j        _&        | j'        | j        _(        | j)        | j        _*        | j+        | j        _,        | j-        | j        _.        |t^          }| j        0                    |           || j        1                    ||           || j        2                    |           |D| j        3                    |j4        |j5        |j6        |j7        |j8        |j9        |j:                   |	 | j        j;        di |	j<         || j        =                    ||           |7| j        >                    |j?        |j@        |jA        |jB        |jC                   | j        D                    |           |d}t          |          | _F        d S )Nr   F)r   r   r   r   reconnect_on_failure)r   r   )r@   rA   rB   rC   rD   rE   rF   )pathheadersr-   )G	_hostname_port
_keepalive_bind_address
_bind_port_clean_start_propertiesasyncioget_event_loop_loopFuture
_connected_disconnected_pending_subscribes_pending_unsubscribes_pending_publishes_pending_calls_threshold
_misc_task_on_message_callbacks_unfiltered_messages_callback	Semaphorera   r"   r*   r   rZ   _client_on_connect
on_connect_on_disconnecton_disconnect_on_subscribeon_subscribe_on_unsubscribeon_unsubscribe_on_message
on_message_on_publish
on_publish_on_socket_openon_socket_open_on_socket_closeon_socket_close_on_socket_register_writeon_socket_register_write_on_socket_unregister_writeon_socket_unregister_writeMQTT_LOGGERenable_loggerusername_pw_settls_set_contexttls_setr@   rA   rB   rC   rD   rE   rF   	proxy_setrP   ws_set_optionswill_setr4   r5   r7   r9   r;   r   tuple_socket_options)rQ   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r;   r   r   r   r   r   s                           r/   rR   zClient.__init__   s   6 "
#)#'%+--
BI.BRBR N 	  	  @B"<>-/%59 GI"  	* 	:(4'.'89V'W'WD$$'+D$&+H$(K'!&%
 %
 %
 #'"2%)%8"$($6!&*&:#"&"2"&"2&*&:#'+'<$040N-262R/> F""6***L(((X(NNN"L((555!L  #,#,"*$.&2"*!+!< !    "DL"66U%5666%L''^EV'WWWL!!
DL$(DK   	&&'8999!N$^44r.   rX   c                d    t          t          | j        j                                                  S )zReturn the client ID.

        Note that paho-mqtt stores the client ID as `bytes` internally.
        We assume that the client ID is a UTF8-encoded string and decode
        it first.
        )r   bytesr   
_client_iddecoderj   s    r/   idz	Client.id\  s%     E4<233::<<<r.   Generator[int, None, None]c              #     K   | j                                         E d{V  | j                                        E d{V  | j                                        E d{V  dS )z)Yield all message IDs with pending calls.N)r   keysr   r   rj   s    r/   _pending_callszClient._pending_callsh  s       +00222222222-22444444444*//11111111111r.   r   timeoutr  rl   c                 K   	 t          j                    }|                    d | j        j        | j        | j        | j        | j        | j	        | j
        | j        	  	         d {V  | j                                        }t          || j                   n;# t          t           j        f$ r"}t%          t'          |                    d d }~ww xY w|                     | j        |           d {V  d S )Nr  )r   get_running_looprun_in_executorr   connectr   r   r   r   r   r   r   socket_set_client_socket_defaultsr   OSErrorr   WebsocketConnectionErrorr   r3   	_wait_forr   )rQ   r  loopclient_socketerrors        r/   r  zClient.connecto  s     	2+--D &&$
"! 
 
 
 
 
 
 
 
 
 !L//11M't7KLLLL 67 	2 	2 	2CJJ''T1	2nnT_gn>>>>>>>>>>>s   BB C,C		Cc                  K   | j                                         }|t          j        k    rt	          |d          |                     | j        |           d {V  d S )NzCould not disconnectr  )r   
disconnectr   MQTT_ERR_SUCCESSr   r  r   )rQ   r  rcs      r/   r  zClient.disconnect  si      \$$&&&&&$:;;;nnT/nAAAAAAAAAAAr.   c                t   K   | j                                         s| j                             d            d S d S r`   )r   done
set_resultrj   s    r/   force_disconnectzClient.force_disconnect  sD      !&&(( 	0))$/////	0 	0r.   r4   rT   r7   optionsmqtt.SubscribeOptions | Noner[   r   r]   #tuple[int] | list[mqtt.ReasonCodes]c               J  K    | j         j        ||||g|R i |\  }}	|t          j        k    rt	          |d          t          j                    }
|                     |	|
| j                  5  | 	                    |
|           d {V cd d d            S # 1 swxY w Y   d S )NzCould not subscribe to topicr  )
r   	subscriber   r  r   r   r   _pending_callr   r  )rQ   r4   r7   r  r;   r  r[   r]   resultr   callback_results              r/   r  zClient.subscribe  s2      -dl,3
.2
 
 
6<
 
 T***(FGGG N 	 _d6NOO 	J 	JIIIIIIII	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	Js   .BBBstr | list[str]c               l  K    | j         j        ||g|R i |\  }}|t          j        k    rt	          |d          t          j                    }|                     ||| j                  5  | 	                    |
                                |           d {V  d d d            d S # 1 swxY w Y   d S )Nz Could not unsubscribe from topicr  )r   unsubscriber   r  r   r   Eventr  r   r  wait)	rQ   r4   r;   r  r[   r]   r  r   confirmations	            r/   r!  zClient.unsubscribe  s#      /dl.ujR4RRR6RRT***(JKKK}\43MNN 	G 	G..!2!2!4!4g.FFFFFFFFF	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	Gs   ,0B))B-0B-Fr5   r   r9   r8   c                 K    | j         j        |||||g|R i |}	|	j        t          j        k    rt          |	j        d          |	                                rd S t          j                    }
| 	                    |	j
        |
| j                  5  |                     |
                                |           d {V  d d d            d S # 1 swxY w Y   d S )NzCould not publish messager  )r   publishr  r   r  r   is_publishedr   r"  r  r   r   r  r#  )rQ   r4   r5   r7   r9   r;   r  r[   r]   infor$  s              r/   r&  zClient.publish  sU      $t|#7C
6:
 
 
>D
 
 7d+++)DEEE 	F},8OPP 	G 	G..!2!2!4!4g.FFFFFFFFF	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	Gs   0CCCqueue_maxsizetopic_filterr*  <AsyncGenerator[AsyncGenerator[mqtt.MQTTMessage, None], None]c              .  K   t                               d           |                     d| d|          \  }}	 | j                            ||           |W V  | j                            |           dS # | j                            |           w xY w)z?Return async generator of messages that match the given filter.zfiltered_messages() is deprecated and will be removed in a future version. Use messages() together with Topic.matches() instead.ztopic_filter=""log_contextr*  N)r   warning"_deprecated_callback_and_generatorr   message_callback_addmessage_callback_remove)rQ   r+  r*  callback	generators        r/   filtered_messageszClient.filtered_messages  s      
 	E	
 	
 	
 #EE8888 F 
 
)	?L--lHEEEOOOO L00>>>>>DL00>>>>s    A8 8Bc                 K   t                               d           | j        t          d          |                     d|          \  }}	 || _        |W V  d| _        dS # d| _        w xY w)zFReturn async generator of all messages that are not caught in filters.zdunfiltered_messages() is deprecated and will be removed in a future version. Use messages() instead.NzBOnly a single unfiltered_messages generator can be used at a time.
unfilteredr/  )r   r1  r   RuntimeErrorr2  rQ   r*  r5  r6  s       r/   unfiltered_messageszClient.unfiltered_messages  s      
 	0	
 	
 	

 -9T   #EE$M F 
 
)	619D.OOOO 26D...D.5555s   A# #	A,3AsyncGenerator[AsyncGenerator[Message, None], None]c                 K   |                      |          \  }}	 | j                            |           |W V  | j                            |           dS # | j                            |           w xY w)a  Return async generator of incoming messages.

        Use queue_maxsize to restrict the queue size. If the queue is full,
        incoming messages will be discarded (and a warning is logged).
        If queue_maxsize is less than or equal to zero, the queue size is infinite.
        r)  N)_callback_and_generatorr   appendremover;  s       r/   messageszClient.messages	  s       #:::WW)	8&--h777OOOO &--h77777D&--h7777s   A A4r0  ctuple[Callable[[mqtt.Client, Any, mqtt.MQTTMessage], None], AsyncGenerator[mqtt.MQTTMessage, None]]c               f     t          j        |          dfd
}d fd}| |            fS )Nmaxsizeclientmqtt.Clientuserdatar   r   r   rX   rl   c                    	                      |           d S # t          j        $ r" t                              d d           Y d S w xY w)N[z,] Message queue is full. Discarding message.
put_nowaitr   	QueueFullr   r1  )rG  rI  r   r0  rB  s      r/   _put_in_queuez@Client._deprecated_callback_and_generator.<locals>._put_in_queue&  su    ##G,,,,,$   ##QQQQ     s    -A
A&AsyncGenerator[mqtt.MQTTMessage, None]c                  K   	 j                                                                       } 	 t          j        | j        ft          j                   d {V \  }}n(# t          j        $ r |                                   w xY w| |v r| 	                                W V  n#|                                  t          d          )NTreturn_when%Disconnected during message iterationr   create_taskgetr   r#  r   FIRST_COMPLETEDCancelledErrorcancelr  r   rW  r  _rB  rQ   s      r/   _message_generatorzEClient._deprecated_callback_and_generator.<locals>._message_generator1  s      M 7;j6L6LLLNN7 7$+Ld01w?V% % %      GD!! -    JJLLL	
 $;;**,,&&&&& JJLLL#$KLLL/M   0A# #%BrG  rH  rI  r   r   r   rX   rl   )rX   rP  r   Queue)rQ   r0  r*  rO  r]  rB  s   ``   @r/   r2  z)Client._deprecated_callback_and_generator  s}     5<M-4X4X4X	 	 	 	 	 	 		M 	M 	M 	M 	M 	M 	M6 002222r.   ?tuple[Callable[[Message], None], AsyncGenerator[Message, None]]c               b     t          j        |          d	fd}d
 fd}| |            fS )NrE  r   r   rX   rl   c                    	                      |            dS # t          j        $ r t                              d           Y dS w xY w)z!Put the new message in the queue.z*Message queue is full. Discarding message.NrL  )r   rB  s    r/   	_callbackz1Client._callback_and_generator.<locals>._callbackT  sc    R##G,,,,,$ R R R##$PQQQQQQRs    )AAAsyncGenerator[Message, None]c                  K   	 j                                                                       } 	 t          j        | j        ft          j                   d{V \  }}n(# t          j        $ r |                                   w xY w| |v r| 	                                W V  n#|                                  t          d          )z,Forward all messages from the message queue.TrR  NrT  rU  r[  s      r/   
_generatorz2Client._callback_and_generator.<locals>._generator[  s      M .2Z-C-CHLLNN-S-S$+Ld01w?V% % %      GD!! -    JJLLL	
 $;;**,,&&&&& JJLLL#$KLLL+Mr^  )r   r   rX   rl   )rX   rf  r`  )rQ   r*  re  rh  rB  s   `   @r/   r?  zClient._callback_and_generatorN  sy     ,3=+O+O+O	R 	R 	R 	R 	R 	R	M 	M 	M 	M 	M 	M 	M2 **,,&&r.   futAwaitable[T]float | Noner   c                   K   	 t          j        |fd|i| d {V S # t           j        $ r t          d          d w xY w)Nr  zOperation timed out)r   wait_forTimeoutErrorr   )rQ   ri  r  r]   s       r/   r  zClient._wait_forv  sj      	= )#IIwI&IIIIIIIII# 	= 	= 	=122<	=s     >r   rh   pending_dictdict[int, T]Iterator[None]c              #  F  K   || j         v rt          d| d          |||<   	 t          t          | j                             }|| j        k    rt
                              d| d           d V  	 ||= d S # t          $ r Y d S w xY w# 	 ||= w # t          $ r Y w w xY wxY w)Nz4There already exists a pending call for message ID "r.  z
There are z pending publish calls.)r   r:  rr   listr   r   r1  KeyError)rQ   r   rh   ro  pendings        r/   r  zClient._pending_call~  s       $%%%MsMMM   "S	$t23344G666##$Q$Q$Q$QRRREEE %%%    %%   sB   AB
 4A9 9
BB
B BB 
BB BB rG  rH  rI  flagsdict[str, int]r  int | mqtt.ReasonCodesr:   c                    | j                                         rd S |t          j        k    r| j                             |           d S | j                             t          |                     d S r`   )r   r  r   CONNACK_ACCEPTEDr  set_exceptionr   )rQ   rG  rI  rv  r  r;   s         r/   r   zClient._on_connect  sn     ?!! 	F&&&O&&r*****O))*:2*>*>?????r.   int | mqtt.ReasonCodes | Nonec                L   | j                                         rd S | j                                        r| j                                        d S |t          j        k    r| j                             |           d S | j                             t          |d                     d S )NzUnexpected disconnect)	r   r  r   	exceptionr   r  r  r{  r   )rQ   rG  rI  r  r;   s        r/   r   zClient._on_disconnect  s     ""$$ 	F ##%% 	)B)B)D)D)PF&&&))"-----,,]2?V-W-WXXXXXr.   granted_qosc                    	 | j                             |          }|                                s|                    |           d S d S # t          $ r" t
                              d| d           Y d S w xY w)NUnexpected message ID "z" in on_subscribe callback)r   popr  r  rt  r   r  )rQ   rG  rI  r   r  r;   ri  s          r/   r   zClient._on_subscribe  s    	Y*..s33C88:: ,{+++++, , 	Y 	Y 	YWWWWXXXXXX	Ys   AA	 	(A54A5reason_codes0list[mqtt.ReasonCodes] | mqtt.ReasonCodes | Nonec                    	 | j                             |                                           d S # t          $ r" t                              d| d           Y d S w xY w)Nr  z" in on_unsubscribe callback)r   r  setrt  r   r  )rQ   rG  rI  r   r;   r  s         r/   r   zClient._on_unsubscribe  s    	&**3//3355555 	 	 	K#KKK     	s   ,0 (AAr   r   c                    | j         |                      |||           t                              |          }| j        D ]} ||           d S r`   )r   r   r   r   )rQ   rG  rI  r   mr5  s         r/   r   zClient._on_message  sc     -9..vxIII&&w//2 	 	HHQKKKK	 	r.   c                    	 | j                             |                                           d S # t          $ r Y d S w xY wr`   )r   r  r  rt  )rQ   rG  rI  r   s       r/   r   zClient._on_publish  sT    	#'',,0022222 	 	 	 DD		s   ,0 
>>sockr   c                     d fd} j                             |                                |           d fd} j                             |           d S )NrX   rl   c                     	                                   d S # t          $ rD} j                                        s j                            |            Y d } ~ d S Y d } ~ d S d } ~ ww xY wr`   )	loop_read	Exceptionr   r  r{  excrG  rQ   s    r/   r5  z(Client._on_socket_open.<locals>.callback   s    :  """"" : : :)..00 :&44S999999999: : : : : ::    
A'3A""A'c                 j     j                                                                         _        d S r`   )r   rV  
_misc_loopr   rj   s   r/   create_task_callbackz4Client._on_socket_open.<locals>.create_task_callback  s(    "j44T__5F5FGGDOOOr.   r~   )r   
add_readerfilenocall_soon_threadsafe)rQ   rG  rI  r  r5  r  s   ``    r/   r   zClient._on_socket_open  s    	: 	: 	: 	: 	: 	: 	: 	
dkkmmX666	H 	H 	H 	H 	H 	H 	
''(<=====r.   c                    |                                 }|dk    r| j                            |           | j        ?| j                                        s(| j                            | j        j                   d S d S d S )N)r  r   remove_readerr   r  r  rZ  )rQ   rG  rI  r  r  s        r/   r   zClient._on_socket_close  sz     B;;J$$V,,,?&t/C/C/E/E&J++DO,BCCCCC '&&&r.   c                N     d fd} j                             ||           d S )NrX   rl   c                     	                                   d S # t          $ rD} j                                        s j                            |            Y d } ~ d S Y d } ~ d S d } ~ ww xY wr`   )
loop_writer  r   r  r{  r  s    r/   r5  z2Client._on_socket_register_write.<locals>.callback  s    :!!##### : : :)..00 :&44S999999999: : : : : ::r  r~   )r   
add_writer)rQ   rG  rI  r  r5  s   ``   r/   r   z Client._on_socket_register_write  sG    	: 	: 	: 	: 	: 	: 	: 	
dH-----r.   c                :    | j                             |           d S r`   )r   remove_writer)rQ   rG  rI  r  s       r/   r   z"Client._on_socket_unregister_write+  s      	
  &&&&&r.   c                   K   | j                                         t          j        k    rCt	          j        d           d {V  | j                                         t          j        k    Ad S d S )Nr   )r   	loop_miscr   r  r   sleeprj   s    r/   r  zClient._misc_loop0  sn      l$$&&$*???-""""""""" l$$&&$*???????r.   'Client'c                >   K   |                                   d{V  | S )zConnect to the broker.N)r  rj   s    r/   
__aenter__zClient.__aenter__4  s+      llnnr.   exc_typetype[BaseException] | Noner  BaseException | NonetbTracebackType | Nonec                P  K   | j                                         r| j                                         }||dS 	 |                                  d{V  dS # t          $ rC}t
                              d| d           |                                  d{V  Y d}~dS d}~ww xY w)zDisconnect from the broker.Nz(Could not gracefully disconnect due to "z". Forcing disconnection.)r   r  r~  r  r   r   r1  r  )rQ   r  r  r  disc_excr  s         r/   	__aexit__zClient.__aexit__9  s       ""$$ 	)3355H#F	*//########### 	* 	* 	*"5 " " "   '')))))))))))))))	*s   A 
B%"8B  B%)r   ).r   r3   r   r6   r   r?   r   r?   r   r   r   r?   r   r   r   r   r   r   r   r   r   r   r   rN   r   r3   r   r6   r   r3   r   r6   r   r6   r;   r   r   r6   r   r   r   r   r   r?   r   r   r}   )rX   r   )r  r6   rX   rl   r~   )r   NN)r4   rT   r7   r6   r  r  r;   r   r[   r   r  r6   r]   r   rX   r  r`   )r4   r  r;   r   r[   r   r  r6   r]   r   rX   rl   )Nr   FN)r4   r3   r5   r   r7   r6   r9   r8   r;   r   r[   r   r  r6   r]   r   rX   rl   )r+  r3   r*  r6   rX   r,  )r*  r6   rX   r,  )r*  r6   rX   r=  )r0  r3   r*  r6   rX   rC  )r*  r6   rX   rb  )ri  rj  r  rk  r]   r   rX   r   )r   r6   rh   r   ro  rp  rX   rq  )rG  rH  rI  r   rv  rw  r  rx  r;   r:   rX   rl   )
rG  rH  rI  r   r  r|  r;   r:   rX   rl   )rG  rH  rI  r   r   r6   r  r  r;   r:   rX   rl   )NN)rG  rH  rI  r   r   r6   r;   r:   r  r  rX   rl   r_  )rG  rH  rI  r   r   r6   rX   rl   )rG  rH  rI  r   r  r   rX   rl   )rX   r  )r  r  r  r  r  r  rX   rl   )&r#   r$   r%   r   MQTT_CLEAN_START_FIRST_ONLYrR   propertyr   r   r  r  r  re   r  r!  r&  r   r7  r<  rB  r2  r?  r  r   r  r   r   r   r   r   r   r   r   r   r   r  r  r  r-   r.   r/   rZ   rZ      sA        u5
  $#(, $-1+/&*+/ %);(,!#8<48%)593u5 u5 u5 u5 u5 u5n 	= 	= 	= X	= 2 2 2 X2 /1 ? ? ? ? ? ?4 24 B B B B B B0 0 0 0  04(,J J J J J J ^J0  )-G
 G G G G G ^G$   $(,G G G G G G ^G4 9:? ? ? ? ? ?& &'6 6 6 6 6 60 &'8 8 8 8 8 8( 9:/3 /3 /3 /3 /3 /3d '(&' &' &' &' &' &'P= = = =    ^B .2@ @ @ @ @2 .2Y Y Y Y YF .2Y Y Y Y Y( .2IM    	 	 	 	   > > > >,D D D D. . . .' ' ' '
# # # #   
* * * * * *r.   rZ   r  _PahoSocket | Noner   Iterable[SocketOption]rl   c                d    | d S t          | t          j                  sd S |D ]} | j        |  d S r`   )rw   r  
setsockopt)r  r   socket_options      r/   r  r  T  sX    
  mV]33  ( 1 1  -0001 1r.   )rV   rW   rX   rW   )r  r  r   r  rX   rl   )A
__future__r   r   rc   loggingr  sslsys
contextlibr   dataclassesr   enumr   typesr   typingr   r	   r
   r   r   r   r   r   r   version_infor   r   r   typing_extensionsr   paho.mqtt.clientr   rG  paho.mqtt.propertiesr   r  r   r   r   r   r   	getLoggerr   setLevelWARNINGr   r<   r    r"   r2   r>   rH   rS   rT   rU   re   rg   r   r   r   r   rZ   r  r-   r.   r/   <module>r     s|   " " " " " " "        



 



 % % % % % % ! ! ! ! ! !            
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 w88888888888CCCCCCCCCC * * * * * *          + + + + + + = = = = = = = = = = ! ! ! ! ! ! ! !g''   W_ % % %V V V V V B     
    g    $. . . . . . . . $( ( ( ( ( ( ( (
 
 
 
 
 
 
 
( V U U U U H  H  H  H  HIcNN
    $@ @ @ @ @ @ @ @2 + * * * * $'6 '6 '6 '6 '6H '6 '6 '6T %	 $ $ $ $
 
 
 
 
 
 
 
>m	* m	* m	* m	* m	* m	* m	* m	*`1 1 1 1 1 1r.   