
    /j$                        S SK r S SKrS SKrS SKJr  S SKrS SKrSSKJ	r	  S SK
r
S SKrS SKrS SKrS SKrS SKJrJrJrJrJr  SSKJr  SSKJrJr  SSKJr  \" 5       r\R<                  " \R>                  5        S	 r S
 r!\RD                  " S\RF                  " \RH                  5      \RJ                  5      r&S r' " S S5      r(\" S5      r) " S S\\)   5      r*\RD                  " S\RF                  " \RH                  5      \RJ                  5      S\RF                  " \RH                  5      S\RJ                  SS4S j5       r+S\RX                  RZ                  S\\.   4S jr/ " S S5      r0g)    N)	ExitStack   )__version__)CallableGenericListOptionalTypeVar)ffi_pb2)Queueclassproperty)loggerc                      [         R                  " 5       S:X  a  g[         R                  " 5       S:X  a  g[         R                  " 5       S:X  a  gg )NLinuxzliblivekit_ffi.soDarwinzliblivekit_ffi.dylibWindowszlivekit_ffi.dll)platformsystem     H/app/agent/.venv/lib/python3.13/site-packages/livekit/rtc/_ffi_client.py	_lib_namer   %   s;    G#"		h	&%		i	' r   c                     [         R                  R                  SS5      R                  5       n U (       a  [        R
                  " U 5      $ [        5       nUc"  [        S[        R                  " 5        S35      e[        R                  R                  S5      U-  n[        R                  R                  U5      n[        R                  U5      n[        R
                  " [!        U5      5      $ )NLIVEKIT_LIB_PATH z"no ffi library found for platform z.. Set LIVEKIT_LIB_PATH to specify the lib pathzlivekit.rtc.resources)osenvirongetstripctypesCDLLr   	Exceptionr   r   	importlib	resourcesfilesas_file_resource_filesenter_contextstr)libpathlibnameresctxpaths        r   get_ffi_libr/   /   s    jjnn/4::<G{{7##kG01B0C D; ;
 	

 


#
#$;
<w
FC



%
%c
*C((-D;;s4y!!r   c                   \    \ rS rSrS\SS4S jrS r\S\4S j5       r	SS jr
S\4S	 jrS
rg)	FfiHandleG   handlereturnNc                     Xl         SU l        g )NF)r3   	_disposed)selfr3   s     r   __init__FfiHandle.__init__H   s    r   c                 $    U R                  5         g N)disposer7   s    r   __del__FfiHandle.__del__L   s    r   c                     U R                   $ r;   )r6   r=   s    r   disposedFfiHandle.disposedO   s    ~~r   c                     U R                   [        :w  ah  U R                  (       dV  SU l        [        R                  R
                  R                  [        R                  " U R                   5      5      (       d   eg g g )NT)	r3   INVALID_HANDLEr6   	FfiClientinstance_ffi_liblivekit_ffi_drop_handler    c_uint64r=   s    r   r<   FfiHandle.disposeS   sW    ;;.(!DN%%..FFvW[WbWbGcdddd 2@(r   c                 "    SU R                    S3$ )Nz
FfiHandle())r3   r=   s    r   __repr__FfiHandle.__repr__X   s    DKK=**r   )r6   r3   r4   N)__name__
__module____qualname____firstlineno__intr8   r>   propertyboolrA   r<   r)   rM   __static_attributes__r   r   r   r1   r1   G   sG    s t  $  e
+# +r   r1   Tc                       \ rS rSrSS jrS\SS4S jr  SS\\R                     S\\
\/\4      S\\   4S	 jjrS
\\   SS4S jrSrg)FfiQueue_   r4   Nc                 F    [         R                  " 5       U l        / U l        g r;   )	threadingRLock_lock_subscribersr=   s    r   r8   FfiQueue.__init__`   s    __&
  	r   itemc                 \   U R                      U R                   H7  u  p#nUb   U" U5      (       d  M    UR                  UR                  U5        M9     S S S 5        g ! [         a     N6f = f! [         a"  n[
        R                  " SU5         S nAM{  S nAff = f! , (       d  f       g = f)Nzerror putting to queue: %s)r_   r`   r"   call_soon_threadsafe
put_nowaitr   error)r7   rb   queueloop	filter_fnes         r   putFfiQueue.putg   s    ZZ*.*;*;&Y(($  /
B--e.>.>E +< Z % 
 ! B LL!=qAAB ZsV   BABA.B
A+(B*A++B.
B8BBBB
B+rh   ri   c                     U R                      [        [           " 5       nU=(       d    [        R                  " 5       nU R
                  R                  X1U45        UsSSS5        $ ! , (       d  f       g= f)aD  Subscribe to FFI events.

Args:
    loop: Event loop to use (defaults to current).
    filter_fn: Optional filter function. If provided, only items where
              filter_fn(item) returns True will be delivered.
              If None, receives all events (original behavior).

Returns:
    Queue to receive events from.
N)r_   r   rX   asyncioget_event_loopr`   append)r7   rh   ri   rg   s       r   	subscribeFfiQueue.subscribey   sO      ZZ!HJE37113D$$e9%=>	 ZZs   AA&&
A4rg   c                     U R                      [        U R                  5       H,  u  nu  n  nX1:X  d  M  U R                  R                  U5          O   S S S 5        g ! , (       d  f       g = fr;   )r_   	enumerater`   pop)r7   rg   iq_s        r   unsubscribeFfiQueue.unsubscribe   sN    ZZ )$*;*; <9Aq!:%%))!, != ZZs   #AA
A*)r_   r`   rO   )NN)rP   rQ   rR   rS   r8   rX   rk   r	   rn   AbstractEventLoopr   rV   r   rq   ry   rW   r   r   r   rZ   rZ   _   s|    B Bd B( 5937w001 HaS$Y/0 
q	,q d r   rZ   data_ptrdata_lenr4   c           	         [         R                  " U [        U5      5      n[        R                  " 5       nUR                  U5        UR                  S5      nUS:X  Ga	  UR                  R                   H  n[        UR                  5      n[        R                  R                  SS5      R                  5       R                  5       nUS;   nU[         R"                  :X  a9  U(       d2  UR$                  S:X  d   UR$                  R'                  S5      (       a  M  Uc  M  [(        R*                  " USUR$                  UR,                  UR.                  UR0                  5        M     g US	:X  ag  [3        S
UR4                  R0                  [6        R8                  SS9  [        R:                  " [        R<                  " 5       [>        R@                  5        g [B        RD                  RF                  RI                  U5        g )NmessagelogsLIVEKIT_RTC_DEBUGr   )true1	libwebrtclivekitz%s:%s:%s - %spaniczFFI Panic: T)fileflush)%r    	string_atrT   	proto_ffiFfiEventParseFromString
WhichOneofr   recordsto_python_levellevelr   r   r   r   lowerloggingDEBUGtarget
startswithr   loglinemodule_pathr   printr   sysstderrkillgetpidsignalSIGTERMrE   rF   rg   rk   )	r|   r}   
event_dataeventwhichrecordr   	debug_env	rtc_debugs	            r   ffi_event_callbackr      se   
 !!(CM:J E	*%Y'Ejj((F#FLL1E

':B?EEGMMOI!]2I%i==K/6==3K3KI3V3V 

#MMKK&&NN )( 		'	mU[[00szzN
		V^^,  'r   r   c                    U [         R                  R                  :X  a  [        R                  $ U [         R                  R
                  :X  a  [        R                  $ U [         R                  R                  :X  a  [        R                  $ U [         R                  R                  :X  a  [        R                  $ U [         R                  R                  :X  a   g r;   )r   LogLevel	LOG_ERRORr   ERRORLOG_WARNWARNLOG_INFOINFO	LOG_DEBUGr   	LOG_TRACE)r   s    r   r   r      s    	"",,,}}	)$$--	-||	)$$--	-||	)$$..	.}}	)$$..	. 	r   c                       \ rS rSr% Sr\S    \S'   \SS j5       rSS jr	\
S\\R                     4S j5       rS\R                  S\R                   4S	 jrS
rg)rE      N	_instancer4   c                 R    U R                   c  [        5       U l         U R                   $ r;   )r   rE   )clss    r   rF   FfiClient.instance   s    == %KCM}}r   c                   ^ [         R                  " 5       U l        [        [        R
                     " 5       U l         [        5       U l        [        [        R                  [        R                  [        R                  /U R                  R                   l        [        R$                  " [        R&                  5      [        R(                  [        R$                  " [        R$                  " [        R&                  5      5      [        R$                  " [        R(                  5      /U R                  R*                  l        [        R,                  U R                  R*                  l        [        R,                  /U R                  R0                  l        [        R                  U R                  R0                  l        / U R                  R2                  l        S U R                  R2                  l        U R                  R!                  [4        SS[6        R8                  " S5      5        U R                  m[:        R<                  U4S j5       ng ! [         a-  n[        5       =(       d    Sn[        SU< SU< S35      S eS nAff = f)	Nlivekit_ffizfailed to load z: zq
Install the livekit package with: pip install livekit
Or set LIVEKIT_LIB_PATH to the path of the native library.Ts   pythonasciic                  &   > T R                  5         g r;   )livekit_ffi_dispose)ffi_libs   r   _dispose_lk_ffi+FfiClient.__init__.<locals>._dispose_lk_ffi  s    '')r   )r]   r^   r_   rZ   r   r   _queuer/   rG   r"   r   ImportError
ffi_cb_fncr    c_boolc_char_plivekit_ffi_initializeargtypesPOINTERc_ubytec_size_tlivekit_ffi_requestrI   restyperH   r   r   r   encodeatexitregister)r7   rj   r+   r   r   s       @r   r8   FfiClient.__init__   s   __&
y1124	'MDM MMOOOO	9
,,5 NN6>>*OONN6>>&..9:NN6??+	6
))2 5;OO))1:@//9J--68>--557))248))1,,i1C1CG1L	
 --		* 
	*A  	k2]G QXYZ\ 		s   I 
J(JJc                     U R                   $ r;   )r   r=   s    r   rg   FfiClient.queue  s    {{r   reqc                 D   UR                  5       n[        U5      n[        R                  U-  " U6 n[        R                  " [        R                  5      " 5       n[        R
                  " 5       nU R                  R                  XC[        R                  " U5      [        R                  " U5      5      nU[        :w  d   e[        R                  " XVR                  5      n[        R                  " 5       n	U	R                  U5        [        U5      R!                  5         U	$ r;   )SerializeToStringlenr    r   r   r   rG   r   byrefrD   r   valuer   FfiResponser   r1   r<   )
r7   r   
proto_data	proto_lendataresp_ptrresp_lenr3   	resp_dataresps
             r   requestFfiClient.request	  s    **,

O	*Z8>>&..13??$22V\\(3V\\(5K
 '''$$X~~>	$$&Y'&!!#r   )rG   r_   r   )r4   rE   rO   )rP   rQ   rR   rS   r   r	   __annotations__r   rF   r8   rU   rZ   r   r   rg   
FfiRequestr   r   rW   r   r   r   rE   rE      sn    '+Ix$+ 
'*R x	 2 23  9// I4I4I r   rE   )1r   rn   r   
contextlibr   r    importlib.resourcesr#   versionr   r   r   r   r   r]   typingr   r   r   r	   r
   _protor   r   _utilsr   r   r   r   r'   r   closer   r/   	CFUNCTYPEr   c_uint8r   r   rD   r1   rX   rZ   r   r   	ValueTyperT   r   rE   r   r   r   <module>r      s?     
        	    = = ( ( + %% &"& dFNN6>>$BFOOT
+ +* CL6wqz 6r $v~~6H%(nnV^^,%(oo%( 
%( I%(P9--77 HSM $F Fr   