class SRPCServer(object): def __init__(self, motionScheduler = None, specification = None, scheduler = None): if(motionScheduler == None): self.motionScheduler = MotionScheduler() else: self.motionScheduler = motionScheduler if(specification == None): self.specification = Specification() else: self.specification = specification if(scheduler == None): self.scheduler = Scheduler() else: self.scheduler = scheduler self.notifier = Notifier() self.sslmanager = SSLManager() self.server_address = (Setting.get('rpc_server_hostname', 'localhost'), Setting.get('rpc_server_port', 9000)) try: self.server = SecureXMLRPCServer(self.server_address, SecureXMLRpcRequestHandler, Setting.get('rpc_server_log', False), self.sslmanager.key, self.sslmanager.certificate) except (socket.error): old = self.server_address[0] Setting.set('rpc_server_hostname', 'localhost') self.server_address = (Setting.get('rpc_server_hostname', 'localhost'), Setting.get('rpc_server_port', 9000)) self.server = SecureXMLRPCServer(self.server_address, SecureXMLRpcRequestHandler, Setting.get('rpc_server_log', False), self.sslmanager.key, self.sslmanager.certificate) self.notifier.addNotice('Unable to bind to RPC Hostname: {}. Reset to localhost.'.format(old), 'warning') self.exposed = Exposed(self.specification, self.motionScheduler) self.server.register_instance(self.exposed) self.scheduler.addTask('srpc_server', self.serve, 0.2, stopped=(not Setting.get('rpc_autostart', False))) def serve(self): self.server.handle_request() def start(self): self.scheduler.startTask('srpc_server') def stop(self): self.scheduler.stopTask('srpc_server') def isRunning(self): return self.scheduler.isRunning('srpc_server') def listMethods(self): return self.exposed.listMethods()
class SRPCServer(object): def __init__(self, motionScheduler=None, specification=None, scheduler=None): """ Initializes the SRPCServer object Args passed to this object allow the SRPC server to share these objects All requests are subject to username and password authentication and connection are made over HTTPS. @param motionScheduler @param specification @param scheduler """ if (motionScheduler == None): self.motionScheduler = MotionScheduler.GetInstance() else: self.motionScheduler = motionScheduler if (specification == None): self.specification = Specification.GetInstance() else: self.specification = specification if (scheduler == None): self.scheduler = Scheduler.GetInstance() else: self.scheduler = scheduler self.notifier = Notifier() self.sslmanager = SSLManager() self.server_address = (Setting.get('rpc_server_hostname', '0.0.0.0'), Setting.get('rpc_server_port', 9000)) try: self.server = SecureXMLRPCServer( self.server_address, SecureXMLRpcRequestHandler, Setting.get('rpc_server_log', False), self.sslmanager.key, self.sslmanager.certificate) except (socket.error): old = self.server_address[0] Setting.set('rpc_server_hostname', '0.0.0.0') self.server_address = (Setting.get('rpc_server_hostname', '0.0.0.0'), Setting.get('rpc_server_port', 9000)) self.server = SecureXMLRPCServer( self.server_address, SecureXMLRpcRequestHandler, Setting.get('rpc_server_log', False), self.sslmanager.key, self.sslmanager.certificate) self.notifier.addNotice( 'Unable to bind to RPC Hostname: {}. Reset to 0.0.0.0.'.format( old), 'warning') self.exposed = Exposed(self.specification, self.motionScheduler) self.server.register_instance(self.exposed) self.scheduler.addTask( 'srpc_server', self.serve, 0.2, stopped=(not Setting.get('rpc_autostart', False))) def serve(self): """ handle a request """ self.server.handle_request() def start(self): """ start the SRPC service """ self.scheduler.startTask('srpc_server') def stop(self): """ stop the SRPC service """ self.scheduler.stopTask('srpc_server') def isRunning(self): """ is the SRPC service running """ return self.scheduler.isRunning('srpc_server') def listMethods(self): """ list available endpoints """ return self.exposed.listMethods()