# HG changeset patch # User Edouard Tisserant # Date 1731934551 -3600 # Node ID ea2db66b185f4fd305a4d6b4854f8f25e8f95432 # Parent 9ff45581769170d8580d9f571df472a742253da7 Cosmetic changes diff -r 9ff455817691 -r ea2db66b185f connectors/ERPC/__init__.py --- a/connectors/ERPC/__init__.py Mon Nov 18 13:52:40 2024 +0100 +++ b/connectors/ERPC/__init__.py Mon Nov 18 13:55:51 2024 +0100 @@ -73,6 +73,36 @@ for idx, force in orders],) } +def rpc_wrapper(method_name, confnodesroot): + client_method = getattr(BeremizPLCObjectServiceClient, method_name) + return_wrapper = ReturnWrappers.get( + method_name, + lambda client_method, obj, args_wrapper, *args: client_method(obj, *args_wrapper(*args))) + args_wrapper = ArgsWrappers.get(method_name, lambda *x:x) + + def exception_wrapper(self, *args): + try: + return return_wrapper(client_method, self, args_wrapper, *args) + except erpc.transport.ConnectionClosed as e: + confnodesroot._SetConnector(None) + confnodesroot.logger.write_error(_("Connection lost!\n")) + except erpc.codec.CodecError as e: + confnodesroot.logger.write_warning(_("ERPC codec error: %s\n") % e) + except erpc.client.RequestError as e: + confnodesroot.logger.write_error(_("ERPC request error: %s\n") % e) + except MissingCallException as e: + confnodesroot.logger.write_warning(_("Remote call not supported: %s\n") % e) + except Exception as e: + errmess = _("Exception calling remote PLC object fucntion %s:\n") % method_name \ + + traceback.format_exc() + confnodesroot.logger.write_error(errmess + "\n") + confnodesroot._SetConnector(None) + + return self.PLCObjDefaults.get(method_name) + return exception_wrapper + + + def ERPC_connector_factory(uri, confnodesroot): """ returns the ERPC connector @@ -108,39 +138,11 @@ 'Malformed URI "%s": %s\n' % (uri, str(e))) return None - def rpc_wrapper(method_name): - client_method = getattr(BeremizPLCObjectServiceClient, method_name) - return_wrapper = ReturnWrappers.get( - method_name, - lambda client_method, obj, args_wrapper, *args: client_method(obj, *args_wrapper(*args))) - args_wrapper = ArgsWrappers.get(method_name, lambda *x:x) - - def exception_wrapper(self, *args): - try: - return return_wrapper(client_method, self, args_wrapper, *args) - except erpc.transport.ConnectionClosed as e: - confnodesroot._SetConnector(None) - confnodesroot.logger.write_error(_("Connection lost!\n")) - except erpc.codec.CodecError as e: - confnodesroot.logger.write_warning(_("ERPC codec error: %s\n") % e) - except erpc.client.RequestError as e: - confnodesroot.logger.write_error(_("ERPC request error: %s\n") % e) - except MissingCallException as e: - confnodesroot.logger.write_warning(_("Remote call not supported: %s\n") % e) - except Exception as e: - errmess = _("Exception calling remote PLC object fucntion %s:\n") % method_name \ - + traceback.format_exc() - confnodesroot.logger.write_error(errmess + "\n") - confnodesroot._SetConnector(None) - - return self.PLCObjDefaults.get(method_name) - return exception_wrapper - PLCObjectERPCProxy = type( "PLCObjectERPCProxy", (ConnectorBase, BeremizPLCObjectServiceClient), - {name: rpc_wrapper(name) + {name: rpc_wrapper(name, confnodesroot) for name,_func in getmembers(IBeremizPLCObjectService, isfunction)}) try: diff -r 9ff455817691 -r ea2db66b185f runtime/ServicePublisher.py --- a/runtime/ServicePublisher.py Mon Nov 18 13:52:40 2024 +0100 +++ b/runtime/ServicePublisher.py Mon Nov 18 13:55:51 2024 +0100 @@ -71,12 +71,14 @@ print("MDNS brodcasted service address :" + ip) self.ip_32b = socket.inet_aton(ip) - self.server.register_service( - zeroconf.ServiceInfo(service_type, - self.service_name, - self.port, - addresses=[self.ip_32b], - properties=self.serviceproperties)) + self.service_info = zeroconf.ServiceInfo( + service_type, + self.service_name, + self.port, + addresses=[self.ip_32b], + properties=self.serviceproperties) + + self.server.register_service(self.service_info) self.retrytimer = None def UnRegisterService(self): @@ -84,12 +86,7 @@ self.retrytimer.cancel() if self.server is not None: - self.server.unregister_service( - zeroconf.ServiceInfo(service_type, - self.service_name, - self.ip_32b, - self.port, - properties=self.serviceproperties)) + self.server.unregister_service(self.service_info) self.server.close() self.server = None