
    ,j                     ~    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	             dS dS )    Nc                   0    e Zd ZddZd Zd ZddZd	 Zd
S )MultiClientServer逖    c                    d | _         || _        t          ||          | _        t	          j                    | _        | j        j                            dd| j	                   t	          j
        d| j                  g}|                     d          j        }t          |j                                        d          D ]:}|                    t	          j        d| |j        |         d                     ;|                    t	          j        d|j        d                     | j                            |           d S )	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          K/DATA/AppData/hermes/venv/lib/python3.11/site-packages/trame/tools/serve.py__init__zMultiClientServer.__init__   s4   "LINNN%133((T5HIII/%)9::;..++2GM..00$??? 	 	EMM"KKM%(#'      	k(gl4PPPQQQ""6*****    c                    K   |j         r't          j                            d|j                    S t          j                            d          S )Nzindex.html?z
index.html)query_stringaiohttpweb	HTTPFound)r#   requests     r'   r   z MultiClientServer._index_handler   sJ       	O;(()Mw7K)M)MNNN{$$\222r)   c                   	K   t          t          j                                                  dd          }t	          d|            |                     |          }|j                            dd          }|j        j         d {V  t          j
        d	i | j        		fd}	 	                    |           d {V  |j        j        j        }|                                 d {V }|                    |           	2 3 d {V }|                    |j        t&          j        j        k    |           d {V  <6 	 |                                 d {V  |j                                         d {V  | d {V  nF# |                                 d {V  |j                                         d {V  | d {V  w xY wt	          d|            	S )
N- z + generictask)backend	exec_modec                    K   | r                     |           d {V  d S                     |           d {V  d S )N)
send_bytessend_str)binarycontent
ws_networks     r'   on_msg_from_serverz9MultiClientServer._ws_handler.<locals>.on_msg_from_server/   sg       3 ++G44444444444 ))'22222222222r)   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appr4   r=   ws_app
connectionmsgr<   s
            @r'   r   zMultiClientServer._ws_handler$   sz     4:<<  ((b11 	lDllnnT""z	VDDj 2EET_EE
	3 	3 	3 	3 	3	$$W---------Z'*F%~~////////J!!"4555'       c ooH 1 88          (Z ""$$$$$$$$$*//#########JJJJJJJJ ""$$$$$$$$$*//#########JJJJJJJJlDlls   )AF E7F AG		localhost  c                 B  K   t          j                                                    | _        t	          j        | j        d          }|                                 d {V  t	          j        |||          }|	                                 d {V  | j         d {V  d S )NT)handle_signals)
asyncioget_event_loopcreate_futurer   r   	AppRunnerr   setupTCPSiterD   )r#   hostportrunnersites        r'   runzMultiClientServer.runG   s      "133AACC&O
 
 
 llnn"6466jjllr)   c                 L    | j         | j                             d           d S d S )NT)r   
set_result)r#   s    r'   rQ   zMultiClientServer.stopT   s0    '''----- ('r)   N)r   r   )rW   rX   )__name__
__module____qualname__r(   r   r   re   rQ   r>   r)   r'   r   r   
   sj        + + + +(3 3 3
! ! !F   . . . . .r)   r   c                  v   t          j        d          } |                     ddd           |                     ddd	           |                     d
dt          d           |                     ddt          d           |                     ddt          d           |                                 \  }}|j        	d|j        vr|                                  d S |j                            d          \  }}	 t          j	        |          }n<# t          $ r/ t          d|j                    |                                  Y d S w xY w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                             d S )NzServe trame application)descriptionz--execztrame.app.demo:Conez1Trame app to serve (default: trame.app.demo:Cone))defaulthelpz--hostrW   z/IP or hostname to serve on (default: localhost)z--portrX   z Port to serve on (default: 8080))rm   rM   rn   z--ws-heart-beatr   z"WebSocket heart beat (default: 30)z--ws-max-sizer   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ModuleNotFoundErrorrC   rS   ra   rb   ws_heart_beatws_max_sizegetattrr   r[   re   )parserargs_module_pathapp_namemoduler   r   s           r'   mainr   Y   s   $1JKKKF
%@    
 >    
 /	     1	     A	     %%''GD!yCty00 IOOC00K(55   7TX77888
 

 !!!	
"ty
"
"###	
"ty
"
"###	
3h
3
3k
3
3444	
#$$$	
0D.
0
0111	
54#3
5
5666))I"$%  J
 K
ty$)4455555s   ;D 5E	E	__main__)rp   r[   rx   r@   r,   aiohttp.webr-   r   r   r   rh   r>   r)   r'   <module>r      s            ! ! ! ! ! !L. L. L. L. L. L. L. L.^=6 =6 =6@ zDFFFFF r)   