Ejemplo n.º 1
0
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()
Ejemplo n.º 2
0
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()