
    il1                        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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 d dlmZ d dlmZ d dlmZ d d	lmZ d d
lT d dlmZmZ d d
lT d d
lT d dlm Z  d dl!m"Z" 	  e j#                    Z$n*# e%$ r"  e j&                    Z$ e j'        e$           Y nw xY wde de(de(fdZ)de*de"fdZ+de*fdZ,d Z-de	j.        fdZ/ G d de0          Z1dS )    N)urlparseparse_qs)ExpiringCache)UTF_8FEISHU_DOMAIN)LogLevel)JSON)logger)Strings)EventDispatcherHandler)*)	FrameTypeMessageType)RepeatedCompositeFieldContainer)Frameheaderskeyreturnc                 R    | D ]}|j         |k    r	|j        c S t          |          N)r   valueHeaderNotFoundException)r   r   headers      Z/home/ubuntu/.hermes/hermes-agent/venv/lib/python3.11/site-packages/lark_oapi/ws/client.py_get_by_keyr       sA        :<  "#
&
&&    
service_idc                     t                      }|j                                        }t          |_        t
          j        j        |_        | |_        t          j
        j        |_        d|_        d|_        |S )Nr   )r   r   addHEADER_TYPEr   r   PINGr   servicer   CONTROLmethodSeqIDLogID)r   framer   s      r   _new_ping_framer(   (   sY    GGE]  FFJ#)FLEM$*ELEKEKLr   nc                     dddd}d| cxk    rdk    rn nd}n|                     | dz  d          }t          |           |z   S )Nstndrd)         
      th)getstr)r)   suffixessuffixs      r   _ordinalr8   5   sX    DT**H	Q}}}}"}}}}}a"fd++q66F?r   c                  >   K   	 t          j        d           d {V  )NTi  )asynciosleep r   r   _selectr=   >   s2      "mD!!!!!!!!!"r   ec                    | j                             t                    }| j                             t                    }||| t	          |          }|t
          k    rW| j                             t                    }t	          |          t          k    rt          ||          t          ||          |t          k    rt          ||          t          ||          r   )r   r4   HEADER_HANDSHAKE_STATUSHEADER_HANDSHAKE_MSGintAUTH_FAILEDHEADER_HANDSHAKE_AUTH_ERRCODEEXCEED_CONN_LIMITClientExceptionServerException	FORBIDDEN)r>   codemsg	auth_codes       r   _parse_ws_conn_exceptionrL   C   s    9==011D
)--,
-
-C|s{t99D{IMM"?@@	y>>...!$,,,!$,,,			dC(((dC(((r   c                      e Zd Zej        dedfdedededededdfd	Z	d#d
Z
d Zd#dZd ZdefdZdeddfdZdefdZdefdZd ZdedefdZd ZdefdZdededededee         f
dZdeddfd Zd!edefd"ZdS )$ClientNTapp_id	log_levelevent_handlerdomainauto_reconnectr   c                 V   || _         || _        || _        || _        || _        || _        d | _        d| _        d| _        d| _	        d| _
        d| _        d| _        d| _        t          d          | _        t!          j                    | _        t'          j        |j                   d S )N    x   )clear_interval)_app_id_app_secret
_log_level_event_handler_auto_reconnect_domain_conn	_conn_url_service_id_conn_id_reconnect_nonce_reconnect_count_reconnect_interval_ping_intervalr   _cacher:   Lock_lockr
   setLevelr   )selfrO   
app_secretrP   rQ   rR   rS   s          r   __init__zClient.__init__W   s     # *$-6C%3"CG
  "%'%'(+ #&%2"%E%E%E\^^
	(((((r   c                    	 t                               |                                            n# t          $ r/}t	          j        |                     d|                     |d }~wt          $ r}t	          j        |                     d|                     t                               |                                            | j	        r-t                               | 
                                           n|Y d }~nd }~ww xY wt                               |                                            t                               t                                 d S )Nconnect failed, err: {})looprun_until_complete_connectrF   r
   error_fmt_log	Exception_disconnectr^   
_reconnectcreate_task
_ping_loopr=   )rl   r>   s     r   startzClient.startp   s>   	##DMMOO4444 	 	 	L'@!DDEEEG 	 	 	L'@!DDEEE##D$4$4$6$6777# ''(9(9:::: ;::::		 	**+++		*****s!   ,/ 
D*A##D0B
C??Dc                   K   	 	 | j         ut          t          | j                            }|                     |                                           d {V  t          j        |                     d                     n?# t          $ r2}t          j
        |                     d|                     Y d }~nd }~ww xY wt          j        | j                   d {V  n$# t          j        | j                   d {V  w xY w)NTzping successzping failed, err: {})r`   r(   rB   rb   _write_messageSerializeToStringr
   debugru   rv   warnr:   r;   rg   )rl   r'   r>   s      r   rz   zClient._ping_loop   s*     		99:)+C0@,A,ABBE--e.E.E.G.GHHHHHHHHHL~!>!>??? F F FDMM*@!DDEEEEEEEEF mD$78888888888gmD$78888888888		9s0   A<B C! 
B>(B94C! 9B>>C! !!Dc                   K   | j                                          d {V  | j        d S 	 |                                 }t	          |          }t          |j                  }|t                   d         }|t                   d         }t          j
        |           d {V }|| _        || _        || _        || _        t          j        |                     d|                     t"                              |                                            n+# t          j        $ r}t+          |           Y d }~nd }~ww xY w| j                                          d S # | j                                          w xY w)Nr   zconnected to {})rj   acquirer`   _get_conn_urlr   r   query	DEVICE_ID
SERVICE_ID
websocketsconnectra   rc   rb   r
   inforu   rq   ry   _receive_message_loopInvalidStatusCoderL   release)rl   conn_urluqconn_idr   connr>   s           r   rs   zClient._connect   s|     j  """"""""":!F	!))++H""A!!A	l1oG:q)J#+H55555555DDJ%DN#DM)DK&7BBCCCT7799::::+ 	( 	( 	($Q''''''''	( J     DJ    s0   C'D E D<#D72E 7D<<E E5c                   K   	 	 | j         t          d          | j                                          d {V }t                              |                     |                     c# t          $ rq}t          j        | 	                    d|                     | 
                                 d {V  | j        r|                                  d {V  n|Y d }~d S d }~ww xY w)NTzconnection is closedz"receive message loop exit, err: {})r`   ConnectionClosedExceptionrecvrq   ry   _handle_messagerv   r
   rt   ru   rw   r^   rx   )rl   rJ   r>   s      r   r   zClient._receive_message_loop   s     	<:%34JKKK JOO--------  !5!5c!:!:;;;	<
  	 	 	L'KQOOPPP""$$$$$$$$$# oo'''''''''' ('''''		s   A$A( (
C#2A&CC#c                 
   t          j        | j                  st          j        | j                  rt	          t
          d          t          j        | j        t          z   ddi| j        | j        d          }|j
        t          j        j        k    rt          |j
        d          t          j        t#          |j        t&                    t(                    }|j        t          k    rni|j        t,          k    rt          |j        d          |j        t.          k    rt          |j        |j                  t	          |j        |j                  |j        }|j        |                     |j                   |j        S )Nzapp_id or app_secret is nulllocalezh)AppID	AppSecret)r   jsonzsystem busy)r   is_emptyrZ   r[   rF   NO_CREDENTIALrequestspostr_   GEN_ENDPOINT_URIstatus_codehttp
HTTPStatusOKrG   r	   	unmarshalr5   contentr   EndpointResprI   SYSTEM_BUSYINTERNAL_ERRORrJ   dataClientConfig
_configureURL)rl   responserespr   s       r   r   zClient._get_conn_url   sU   DL)) 	QW-=d>N-O-O 	Q!-1OPPP=L++$ !- 	
 	
 	
 4?#555!("6FFF~c("2E::LII9??Y+%%!$)];;;Y.((!$)TX666!$)TX666y(OOD-...xr   rJ   c                   K   	 t                      }|                    |           t          |j                  }|t          j        k    r|                     |           d {V  d S |t          j        k    r|                     |           d {V  d S d S # t          $ r3}t          j
        |                     d|                     Y d }~d S d }~ww xY w)Nzhandle message failed, err: {})r   ParseFromStringr   r$   r#   _handle_control_frameDATA_handle_data_framerv   r
   rt   ru   )rl   rJ   r'   ftr>   s        r   r   zClient._handle_message   s     
	MGGE!!#&&&5<((BY&&&0077777777777y~%%--e44444444444 &% 	M 	M 	ML'GKKLLLLLLLLL	Ms   A"B (+B 
C!(CCr'   c                   K   |j         }t          |t                    }t          |          }|t          j        k    rd S |t          j        k    ryt          j        |                     d                     |j	        sd S t          j        t          |j	        t                    t                    }|                     |           d S d S )Nzreceive pong)r   r   r    r   r!   PONGr
   r   ru   payloadr	   r   r5   r   r   r   )rl   r'   hstype_message_typeconfs         r   r   zClient._handle_control_frame   s      ]B,,"5));+++F[---L~66777= >#emU";";\JJDOOD!!!!! .-r   c                 8  K   |j         }t          |t                    }t          |t                    }t          |t                    }t          |t
                    }t          |t                    }|j        }t          |          dk    r6| 	                    |t          |          t          |          |          }|d S t          |          }	t          j        |                     d|	j        |||                    t                                          t#          t$          j        j                  }
	 t          t+          t-          j                    dz                      }|	t          j        k    r| j                            |          }n|	t          j        k    rd S d S t          t+          t-          j                    dz                      }|                                }t8          |_        t=          ||z
            |_        |Ct?          j         tC          j"        |          #                    t                               |
_$        nf# tJ          $ rY}t          j&        |                     d|	j        |||                     t#          t$          j        j'                  }
Y d }~nd }~ww xY wtC          j"        |
          #                    t                     |_        | (                    |)                                           d {V  d S )Nr.   zLreceive message, message_type: {}, message_id: {}, trace_id: {}, payload: {})rI   i  zNhandle message failed, message_type: {}, message_id: {}, trace_id: {}, err: {})*r   r   HEADER_MESSAGE_IDHEADER_TRACE_ID
HEADER_SUM
HEADER_SEQr    r   rB   _combiner   r
   r   ru   r   decoder   Responser   r   r   roundtimeEVENTr]   do_without_validationCARDr   HEADER_BIZ_RTr   r5   base64	b64encoder	   marshalencoder   rv   rt   INTERNAL_SERVER_ERRORr}   r~   )rl   r'   r   msg_idtrace_idsum_seqr   plr   r   r{   resultendr   r>   s                   r   r   zClient._handle_data_frame   s     ]R!233r?332z**"j))B,,]t99q==vs4yy#c((B??Bz"5))T]]#q#/#5vxSXIYIY[ [ 	\ 	\ 	\ T_/000	HdikkD01122E{000,BB2FF!111eDIKK$.//00CVVXXF&FJsU{++FL!",T\&-A-A-H-H-O-OPP	 	H 	H 	HLn*0&(AG GH H H !FGGGDDDDDD		H T**11%88!!%"9"9";";<<<<<<<<<<<s!   :A+I )B,I 
J9 AJ44J9c                   K   | j         dk    r5t          j                    | j         z  }t          j        |           d {V  | j        dk    rlt          | j                  D ]?}|                     |           d {V r d S t          j        | j                   d {V  @t          d| j         d          d}	 |                     |           d {V rd S t          j        | j                   d {V  |dz  }B)Nr   z-unable to connect to the server after trying z timesTr.   )	rd   randomr:   r;   re   range_try_connectrf   ServerUnreachableException)rl   nonceis      r   rx   zClient._reconnect  s\      1$$MOOd&;;E-&&&&&&&&&  A%%4011 > >**1-------- FFmD$<==========,]@U]]]_ _ _ A**1-------- FmD$<=========Q	r   cntc           	        K   t          j        |                     dt          |dz                                  	 |                                  d {V  dS # t
          $ r/}t          j        |                     d|                     |d }~wt          $ r3}t          j        |                     d|                     Y d }~dS d }~ww xY w)Nz#trying to reconnect for the {} timer.   Trp   F)r
   r   ru   r8   rs   rF   rt   rv   )rl   r   r>   s      r   r   zClient._try_connect1  s      DMM"GRUXYRYIZIZ[[\\\	--//!!!!!!!4 	 	 	L'@!DDEEEG 	 	 	L'@!DDEEE55555	s#   A 
C"*BC(CCc                 >  K   	 | j                                          d {V  | j        8	 d | _        d| _        d| _        d| _        | j                                          d S | j                                         d {V  t          j	        | 
                    d| j                             d | _        d| _        d| _        d| _        | j                                          d S # d | _        d| _        d| _        d| _        | j                                          w xY w)NrU   zdisconnected to {})rj   r   r`   ra   rc   rb   r   closer
   r   ru   )rl   s    r   rw   zClient._disconnect=  s/     	!*$$&&&&&&&&&z! DJDNDM!DJ      *""$$$$$$$$$K&:DNKKLLLDJDNDM!DJ     	 DJDNDM!DJ    s   &C% "AC% %7Dr   c                    K   | j         4 d {V  | j        t          d          | j                            |           d {V  d d d           d {V  d S # 1 d {V swxY w Y   d S )Nz*connection is closed, write message failed)rj   r`   r   send)rl   r   s     r   r}   zClient._write_messageK  s	     : 	( 	( 	( 	( 	( 	( 	( 	(z!/0\]]]*//$'''''''''	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	(s   7A
A$'A$r   r   r   bsc                     | j                             |          }|)dg|z  }|||<   | j                             ||d           d S |||<   d}|D ](}|s| j                             ||d            d S ||z  })|S )Nr      )rh   r4   set)	rl   r   r   r   r   valbufr   vs	            r   r   zClient._combineQ  s    koof%%;%$,CCHKOOFC+++4C 	 	A Q///tt!GBB	r   r   c                 f    |j         | _        |j        | _        |j        | _        |j        | _        d S r   )ReconnectCountre   ReconnectIntervalrf   ReconnectNoncerd   PingIntervalrg   )rl   r   s     r   r   zClient._configurec  s4     $ 3#'#9  $ 3"/r   fmtc                 L     |j         | }| j        dk    r|d| j         dz  }|S )NrU   z
 [conn_id=])formatrc   )rl   r   argslogs       r   ru   zClient._fmt_logi  s:    cj$=B00000C
r   )r   N)__name__
__module____qualname__r   INFOr   r5   r   boolrn   r{   rz   rs   r   r   bytesr   r   r   r   rx   rB   r   rw   r}   Optionalr   r   r   ru   r<   r   r   rN   rN   V   s        (0}9=,(,) )) %) !7	)
 ) "&) 26) ) ) )2+ + + +"
9 
9 
9! ! ! !0  s    BM M4 M M M M" " " " ")=e )= )= )= )=V  ,
c 
d 
 
 
 
! ! !( ( ( ( (s # C U xPU    $0| 0 0 0 0 0C 3      r   rN   )2r:   r   r   r   r   urllib.parser   r   r   r   lark_oapi.core.cacher   lark_oapi.core.constr   r   lark_oapi.core.enumr   lark_oapi.core.jsonr	   lark_oapi.core.logr
   lark_oapi.core.utilsr   "lark_oapi.event.dispatcher_handlerr   lark_oapi.ws.constlark_oapi.ws.enumr   r   lark_oapi.ws.exceptionlark_oapi.ws.model3lark_oapi.ws.pb.google.protobuf.internal.containersr   lark_oapi.ws.pb.pbbp2_pb2r   get_event_looprq   RuntimeErrornew_event_loopset_event_loopr5   r   rB   r(   r8   r=   r   rL   objectrN   r<   r   r   <module>r     sp        + + + + + + + +      . . . . . . 5 5 5 5 5 5 5 5 ( ( ( ( ( ( $ $ $ $ $ $ % % % % % % ( ( ( ( ( ( E E E E E E         4 4 4 4 4 4 4 4 $ $ $ $         _ _ _ _ _ _ + + + + + +!!7!##DD ! ! !!7!##DG4     !
'8 's 's ' ' ' '
 
 
 
 
 
    " " "
)
 < ) ) ) )&X X X X XV X X X X Xs   2B $B)(B)