
    vj                     l    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  G d d      Zd Z	e
dk(  r e	        yy)    Nc                   .    e Zd ZddZd Zd ZddZd Zy)	MultiClientServerc                    d | _         || _        t        ||      | _        t	        j
                         | _        | j                  j                  j                  dd| j                         t	        j                  d| j                        g}| j                  d      j                  }t        |j                  j                         d      D ]9  }|j!                  t	        j"                  d| |j                  |   d             ; |j!                  t	        j"                  d|j$                  d             | j                  j'                  |       y )	N)max_msg_size	heartbeatGET/z/ws__www__T)reverse)append_version)_completion	trame_appdict
ws_optionsaiohttp_webApplication
web_serverrouter	add_route_index_handlerget_ws_handlerserversortedservekeysappendstatic_www
add_routes)selfr   r   r   routesapp_wwwroutes          >/DATA/.local/lib/python3.12/site-packages/trame/tools/serve.py__init__zMultiClientServer.__init__   s   "LIN%113((T5H5HI//%)9)9:;..+22GMM..0$?EMM""wKMM%(#' @ 	k((gll4PQ""6*    c                    K   |j                   r,t        j                  j                  d|j                          S t        j                  j                  d      S w)Nzindex.html?z
index.html)query_stringaiohttpweb	HTTPFound)r!   requests     r%   r   z MultiClientServer._index_handler   sG     ;;((;w7K7K6L)MNN{{$$\22s   AAc                   	K   t        t        j                               j                  dd      }t	        d|        | j                  |      }|j                  j                  dd      }|j                  j                   d {    t        j                  d	i | j                  		fd}	 	j                  |       d {    |j                  j                  j                  }|j                          d {   }|j!                  |       	2 3 d {   }|j#                  |j$                  t&        j(                  j*                  k(  |       d {    I7 7 7 d7 J7 6 	 |j-                          d {  7   |j                  j/                          d {  7   | d {  7   nL# j-                          d {  7   |j                  j/                          d {  7   | d {  7   w xY wt	        d|        	S w)
N- z + generictask)backend	exec_modec                    K   | rj                  |       d {    y j                  |       d {    y 7 7 w)N)
send_bytessend_str)binarycontent
ws_networks     r%   on_msg_from_serverz9MultiClientServer._ws_handler.<locals>.on_msg_from_server/   s;      ++G444 ))'222 52s   >:><>>z -  )struuiduuid4replaceprintr   r   startreadyr   WebSocketResponser   prepare_serverwsconnect
on_messagesendtyper*   	WSMsgTypeBINARYclosestop)
r!   r-   nameappr2   r;   ws_app
connectionmsgr:   s
            @r%   r   zMultiClientServer._ws_handler$   s    4::< ((b1 	D6lnnT"zz	VDjj 22ET__E
	3	$$W---ZZ''**F%~~//J!!"45' c ooHH 1 1 8 88  ! 	 ./ ( ""$$$**//###JJ ""$$$**//###JJD6ls   BHE(H0F1 E7F1 <E!=F1 E'E#E';F1 E%F1 HF1 !F1 #E'%F1 'F1 )H<E?="HF" 
H*F-+H1G:G"G:(G+)
G:3G64G::Hc                 ^  K   t        j                         j                         | _        t	        j
                  | j                  d      }|j                          d {    t	        j                  |||      }|j                          d {    | j                   d {    y 7 H7 7 	w)NT)handle_signals)
asyncioget_event_loopcreate_futurer   r   	AppRunnerr   setupTCPSiterB   )r!   hostportrunnersites        r%   runzMultiClientServer.runG   s     "113AAC&&OO
 lln""646jjl 	 	s6   AB-B'.B-B)B-!B+"B-)B-+B-c                 T    | j                   | j                   j                  d       y y )NT)r   
set_result)r!   s    r%   rO   zMultiClientServer.stopT   s'    '''- (r'   N)逖    )	localhost  )__name__
__module____qualname__r&   r   r   ra   rO   r<   r'   r%   r   r   
   s    +(3
!F.r'   r   c                  D   t        j                  d      } | j                  ddd       | j                  ddd	       | j                  d
dt        d       | j                  ddt        d       | j                  ddt        d       | j	                         \  }}|j
                  d|j
                  vr| j                          y |j
                  j                  d      \  }}	 t        j                  |      }t        d       t        d|j                          t        d|j                          t        d| d|        t        d       t        d|j                          t        d|j                           t#        ||      }t%        ||j                  |j                         }t'        j(                  |j)                  |j                  |j                               y # t        $ r+ t        d|j                          | j                          Y y w xY w)NzServe trame application)descriptionz--execztrame.app.demo:Conez1Trame app to serve (default: trame.app.demo:Cone))defaulthelpz--hostrf   z/IP or hostname to serve on (default: localhost)z--portrg   z Port to serve on (default: 8080))rm   rK   rn   z--ws-heart-beatre   z"WebSocket heart beat (default: 30)z--ws-max-sizerd   z2WebSocket maximum message size (default: 10000000):zInvalid trame app to serve: zServer configurationz
  - host: z
  - port: z	  - app: z from zWebsocket configurationz  - heartbeat: z  - Max message size: )r   r   )argparseArgumentParseradd_argumentintparse_known_argsexec
print_helpsplit	importlibimport_moduleModuleNotFoundErrorrA   rQ   r]   r^   ws_heart_beatws_max_sizegetattrr   rW   ra   )parserargs_module_pathapp_namemoduler   r   s           r%   mainr   Y   s   $$1JKF
%@  
 >  
 /	   1	   A	   %%'GD!yyCtyy0 IIOOC0K((5 

 !	Jtyyk
"#	Jtyyk
"#	IhZvk]
34	
#$	OD../
01	"4#3#3"4
56)I"$$%%J
 KK
tyy$))45'  ,TXXJ78s   'G+ +1HH__main__)rp   rW   rx   r>   r*   aiohttp.webr+   r   r   r   rh   r<   r'   r%   <module>r      s>         !L. L.^=6@ zF r'   