
    iq                     T    d dl Z d dlmZmZ d dlmZ d dlmZ d dlm	Z	  G d d      Z
y)    N)AnyDict)ValidationError)SessionExecutionController)WorkflowSessionStorec                   t    e Zd ZdZ	 ddededdfdZdedeee	f   fd	Z
dedeee	f   fd
ZdefdZdefdZy)MessageHandlerz6Routes WebSocket messages to the appropriate handlers.Nsession_storesession_controllerreturnc                 j    || _         || _        || _        t        j                  t
              | _        y N)r
   r   workflow_run_servicelogging	getLogger__name__logger)selfr
   r   r   s       L/Users/bowang/.openclaw/workspace/ChatDev/server/services/message_handler.py__init__zMessageHandler.__init__   s.     +"4$8!''1    
session_iddatac                 D  K   |j                  d      }|dk(  r| j                  |||       d {    y |dk(  r| j                  ||       d {    y |dk(  r| j                  ||       d {    y |j	                  |ddd| id       d {    y 7 h7 J7 ,7 w)	Ntypehuman_inputping
get_statuserrormessagezUnknown message type: r   r   )get_handle_human_input_handle_ping_handle_get_statussend_message)r   r   r   websocket_managermessage_types        r   handle_messagezMessageHandler.handle_message   s     xx'=(**:t=NOOOV###J0ABBB\)))*6GHHH#00 98N|n6]*^_   PBHsE   -B BB BB /B0"B BB B B B c           	        K   	 |j                  di       xs i }|j                  dd      }|j                  d      xs g }|s"|s |j                  |dddid       d {    y | j                  j                  |||d	       |j                  |d
ddid       d {    y 7 D7 # t        $ r3}|j                  |ddt        |      id       d {  7   Y d }~y d }~wt        $ rP}| j                  j                  d||       |j                  |ddt        |      id       d {  7   Y d }~y d }~ww xY ww)Nr   input attachmentsr   r    zEmpty inputr!   )textr-   input_receivedzInput receivedz-Error handling human input for session %s: %s)	r"   r&   r   provide_human_inputr   str	Exceptionr   r   )r   r   r   r'   payload
user_inputr-   excs           r   r#   z"MessageHandler._handle_human_input&   sV     	hhvr*0bG Wb1J!++m4:Kk'44$y-.HI   ##77#K@
 $00)I?O3PQ  
  	#00 9c#h*?@    	KKMz[^_#00 9c#h*?@  	s   D>AB( B$ B( $D>%9B( B&B( #D>$B( &B( (	D;1#CCCD>D;+A D6+D.,D61D>6D;;D>c                 B   K   |j                  |       d {    y 7 wr   )handle_heartbeat)r   r   r'   s      r   r$   zMessageHandler._handle_pingI   s     00<<<s   c                    K   | j                   j                  |      }|j                  |d|xs ddid       d {    y 7 w)Nstatusr    zSession not foundr!   )r
   get_session_infor&   )r   r   r'   session_infos       r   r%   z!MessageHandler._handle_get_statusL   sJ     )):::F,,|'W	CV7WX
 	
 	
s   :AAAr   )r   
__module____qualname____doc__r   r   r   r1   r   r   r)   r#   r$   r%    r   r   r	   r	   
   sz    @ "		2+	2 7	2
 
	2s $sCx. !C !tCH~ !F=S =
3 
r   r	   )r   typingr   r   utils.exceptionsr   !server.services.session_executionr   server.services.session_storer   r	   r?   r   r   <module>rD      s       , H >G
 G
r   