@@ -184,28 +184,35 @@ def _pre_send_user_message(args):
184184
185185 try :
186186 buffer = make_object (ProtobufMessage , args [3 ])
187+ wrapped_from_abstract = False
187188 except RuntimeError :
188189 # Patch for issue #390 - UserMessage was created by another plugin.
189190 buffer = ProtobufMessage .from_abstract_pointer (args [3 ])
191+ wrapped_from_abstract = True
190192
191193 protobuf_user_message_hooks .notify (_recipients , buffer )
192194
193195 # No need to do anything behind this if no listener is registered
194- if not user_message_hooks :
195- return
196+ if user_message_hooks :
197+ try :
198+ impl = get_user_message_impl (message_index )
199+ except NotImplementedError :
200+ impl = None
201+
202+ if impl is not None :
203+ data = impl .read (buffer )
204+ user_message_hooks .notify (_recipients , data )
205+
206+ # Update buffer if data has been changed
207+ if data .has_been_changed ():
208+ buffer .clear ()
209+ impl .write (buffer , data )
210+
211+ # If we wrapped the buffer from an abstract pointer, make sure to
212+ # apply any changes that may have been made back into the original.
213+ if wrapped_from_abstract :
214+ buffer .parse_to_abstract_pointer (args [3 ])
196215
197- try :
198- impl = get_user_message_impl (message_index )
199- except NotImplementedError :
200- return
201-
202- data = impl .read (buffer )
203- user_message_hooks .notify (_recipients , data )
204-
205- # Update buffer if data has been changed
206- if data .has_been_changed ():
207- buffer .clear ()
208- impl .write (buffer , data )
209216
210217else :
211218 @PreHook (get_virtual_function (engine_server , 'UserMessageBegin' ))
0 commit comments