@@ -68,12 +68,24 @@ async def handle_message(self, msg):
6868 if next_hop is None :
6969 await outer_env .deserialize_inner (self .receptor )
7070 if outer_env .inner_obj .message_type == 'directive' :
71- namespace , _ = outer_env .inner_obj .directive .split (':' , 1 )
72- if namespace == RECEPTOR_DIRECTIVE_NAMESPACE :
73- await directive .control (self .receptor .router , outer_env .inner_obj )
74- else :
75- # other namespace/work directives
76- await self .receptor .work_manager .handle (outer_env .inner_obj )
71+ try :
72+ namespace , _ = outer_env .inner_obj .directive .split (':' , 1 )
73+ if namespace == RECEPTOR_DIRECTIVE_NAMESPACE :
74+ await directive .control (self .receptor .router , outer_env .inner_obj )
75+ else :
76+ # other namespace/work directives
77+ await self .receptor .work_manager .handle (outer_env .inner_obj )
78+ except Exception as e :
79+ err_resp = outer_env .inner_obj .make_response (
80+ receptor = self .receptor ,
81+ recipient = outer_env .inner_obj .sender ,
82+ payload = str (e ),
83+ in_response_to = outer_env .inner_obj .message_id ,
84+ serial = outer_env .inner_obj .serial + 1 ,
85+ ttl = 15 ,
86+ code = 1 ,
87+ )
88+ await self .receptor .router .send (err_resp )
7789 elif outer_env .inner_obj .message_type == 'response' :
7890 in_response_to = outer_env .inner_obj .in_response_to
7991 if in_response_to in self .receptor .router .response_registry :
@@ -87,3 +99,4 @@ async def handle_message(self, msg):
8799 f'Unknown message type: { outer_env .inner_obj .message_type } ' )
88100 else :
89101 await self .receptor .router .forward (outer_env , next_hop )
102+
0 commit comments