def process_request(self, address, data): request = _RpcRequestSerializer.deserialize(data) self.logger.debug('Processing \'%s\' rpc method.' % request.method) for h in self._service_handlers: if h.can_handle(request.method): response = h.handle(request.method, request.data) if response: return Serializer.serialize(response) else: return None else: raise ServerException('Method %s is not supported.' % request.method)
def call_method(self, method_descriptor, message): try: message_data = Serializer.serialize(message) request = _RpcRequest('', method_descriptor.name, message_data) serialized = _RpcRequestSerializer.serialize(request) self.connect() self.send(serialized) if method_descriptor.response_class: response = self.receive() if Serializer.can_deserialize(response, ErrorMessage): deserialized = Serializer.deserialize(response, ErrorMessage) raise ServerException(deserialized.message) else: return Serializer.deserialize(response, method_descriptor.response_class) finally: self.close()
def handle_error(self, address, exception, exc_info): self.logger.error('Unhandled error: %s' % exception.message, exc_info=exc_info) return Serializer.serialize(ErrorMessage(exception.message))