class MessageBusReceiver(AbstractReceiver): def get_message_parser(self): return self.message_parser def set_service_bus(self, service_bus): self.service_bus = service_bus self.message_parser = XmlMessageParser() self.message_parser.set_configuration(service_bus.configuration) def on_rpc(self, channel, method, header, body): event = self.message_parser.parse(body) if not self.message_parser.validate_token(event.token): logging.error('Token Error') msg = XmlResponseGenerator(event.id, "Token not valid!") self.response_message(channel, method, header, msg.to_xml()) return response = RPCResponse(event, channel, method, header, self) request = Request(event, self) service = self.service_bus.lookup_rpc_service_thread(event.category, event.service) if service is None: error_msg = 'Cannot Find RPC Service: %s.%s' % (event.category, event.service) logging.error(error_msg) msg = XmlResponseGenerator(event.id, error_msg) self.response_message(channel, method, header, msg.to_xml()) else: logging.info("Call RPC Service %s.%s" % (event.category, event.service)) service.on_call(request, response) def on_message(self, channel, method, header, body): event = self.message_parser.parse(body) if not self.message_parser.validate_token(event.token): logging.error('Token Error') msg = XmlResponseGenerator(event.id, "Token not valid!") self.response_message(channel, method, header, msg.to_xml()) return request = Request(event, self) service = self.service_bus.lookup_message_service_thread(event.category, event.service) if service is None: error_msg = 'Cannot Find Message Service: %s.%s' % (event.category, event.service) logging.error(error_msg) msg = XmlResponseGenerator(event.id, error_msg) self.response_message(channel, method, header, msg.to_xml()) else: logging.info("Call Message Service %s.%s" % (event.category, event.service)) service.on_message(request)
class MessageBusReceiver(AbstractReceiver): def get_message_parser(self): return self.message_parser def set_service_bus(self, service_bus): self.service_bus = service_bus self.message_parser = XmlMessageParser() self.message_parser.set_configuration(service_bus.configuration) def on_rpc(self, channel, method, header, body): event = self.message_parser.parse(body) if not self.message_parser.validate_token(event.token): logging.error("Token Error") msg = XmlResponseGenerator(event.id, "Token not valid!") self.response_message(channel, method, header, msg.to_xml()) return response = RPCResponse(event, channel, method, header, self) request = Request(event, self) service = self.service_bus.lookup_rpc_service(event.category, event.service) if service is None: error_msg = "Cannot Find RPC Service: %s.%s" % (event.category, event.service) logging.error(error_msg) msg = XmlResponseGenerator(event.id, error_msg) self.response_message(channel, method, header, msg.to_xml()) else: if self.service_bus.is_background_service(service): logging.info("Call Background RPC Service %s.%s" % (event.category, event.service)) self.__run_in_background(service.on_call, (request, response)) else: logging.info("Call RPC Service %s.%s" % (event.category, event.service)) self.__run_in_frontground(service.on_call, (request, response)) def on_message(self, channel, method, header, body): event = self.message_parser.parse(body) if not self.message_parser.validate_token(event.token): logging.error("Token Error") msg = XmlResponseGenerator(event.id, "Token not valid!") self.response_message(channel, method, header, msg.to_xml()) return request = Request(event, self) service = self.service_bus.lookup_message_service(event.category, event.service) if service is None: error_msg = "Cannot Find Message Service: %s.%s" % (event.category, event.service) logging.error(error_msg) msg = XmlResponseGenerator(event.id, error_msg) self.response_message(channel, method, header, msg.to_xml()) else: if self.service_bus.is_background_service(service): logging.info("Call Background Message Service %s.%s" % (event.category, event.service)) self.__run_in_background(service.on_message, (request,)) else: logging.info("Call Message Service %s.%s" % (event.category, event.service)) self.__run_in_frontground(service.on_message, (request,)) def add_background_service(self, thread): nthreads = [thread] for t in self.background_threads: if t.is_alive(): nthreads.append(t) self.background_threads = nthreads def wait_background_services(self): for t in self.background_threads: t.join() def __run_in_background(self, func, params): thread = threading.Thread(target=self.__run_in_frontground, args=(func, params)) thread.start() self.add_background_service(thread) def __run_in_frontground(self, func, params): func(*params) if len(params) > 0: request = params[0] request.get_sender().close()