def wait_for_started(self, _timeout=10): _begin_time = time.time() while time.time() - _begin_time <= _timeout: print_msg('wait_for_started...') if self.is_working: return True time.sleep(0.2) #return False raise Exception('Server failed to start.')
def _dispatch(self, method, params): _result = None print_msg('--- --- --- --- --- ---') print_msg('%s <<< %s' % (method, params)) try: _result = SimpleXMLRPCServer.SimpleXMLRPCServer._dispatch( self, method, params) except Exception, e: print_err('%s - Error: %s' % (method, e)) print_err('%s - Traceback:\n%s' % (method, traceback.format_exc())) raise
def __init__(self, addr): SimpleXMLRPCServer.SimpleXMLRPCServer.__init__(self, addr=addr, logRequests=False, allow_none=True, encoding='UTF-8') self.address, self.port = addr self._start_work_time = datetime.datetime.fromtimestamp(time.time()) self._last_interactive_time = None self.register_introspection_functions() self.register_function(self.get_start_work_time, 'get_start_work_time') self.register_function(self.get_last_interactive_time, 'get_last_interactive_time') self.register_function(self.get_pid, 'get_pid') self.register_function(self.get_log, 'get_log') self.register_function(self.get_binary_data, 'get_binary_data') self.register_function(self.send_binary_data, 'send_binary_data') self.register_function(self.is_working, 'is_working') self.register_function(self.shutdown_driver, 'shutdown_driver') self.register_package() print_msg('Server(%s:%s) - Started' % (self.address, self.port))
def main(**args): daemonize() Logger(LogPath) global DRIVER_DEFAULT_ADDRESS global DRIVER_DEFAULT_PORT Process().kill_process_by_port(args.get('port', DRIVER_DEFAULT_PORT)) os.system('killall -9 "ScriptAgent" "instruments" "Instruments"') args.update({'address': args.get('address', DRIVER_DEFAULT_ADDRESS)}) args.update({'port': args.get('port', DRIVER_DEFAULT_PORT)}) print_msg('Server(%(address)s:%(port)s) - StartWorking' % args) print_msg('--- --- --- --- --- ---') ThreadXMLRPCServer(**args).join() print_msg('--- --- --- --- --- ---') print_msg('Server(%(address)s:%(port)s) - StopWorking' % args)
class XMLRPCServer(SocketServer.ThreadingMixIn, SimpleXMLRPCServer.SimpleXMLRPCServer): LOG_FILTERED_METHODS = [ 'get_log', 'get_binary_data', 'ins.get_log', 'uia.target.get_element_tree', 'uia.element.get_element_tree' ] def __init__(self, addr): SimpleXMLRPCServer.SimpleXMLRPCServer.__init__(self, addr=addr, logRequests=False, allow_none=True, encoding='UTF-8') self.address, self.port = addr self._start_work_time = datetime.datetime.fromtimestamp(time.time()) self._last_interactive_time = None self.register_introspection_functions() self.register_function(self.get_start_work_time, 'get_start_work_time') self.register_function(self.get_last_interactive_time, 'get_last_interactive_time') self.register_function(self.get_pid, 'get_pid') self.register_function(self.get_log, 'get_log') self.register_function(self.get_binary_data, 'get_binary_data') self.register_function(self.send_binary_data, 'send_binary_data') self.register_function(self.is_working, 'is_working') self.register_function(self.shutdown_driver, 'shutdown_driver') self.register_package() print_msg('Server(%s:%s) - Started' % (self.address, self.port)) def get_start_work_time(self): return '%s' % self._start_work_time def get_last_interactive_time(self): return '%s' % self._last_interactive_time def get_pid(self): return os.getpid() def get_log(self): try: return urllib.quote(file(LogPath, "r").read()) except: return urllib.quote('获取Log失败') def get_binary_data(self, filename): '''拷贝Server端的文件到client端 ''' if os.path.exists(filename): data = None with open(filename, "rb") as fd: data = fd.read() return xmlrpclib.Binary(base64.encodestring(data)) else: raise Exception('[%s] does not exist' % filename) def send_binary_data(self, binary, filename): '''拷贝client端的文件到Server端 ''' if os.path.exists(filename): os.remove(filename) with open(filename, "wb") as fd: fd.write(binary.data) return os.path.isfile(filename) def is_working(self): return True def _shutdown(self): self.shutdown() def shutdown_driver(self): thread.start_new_thread(self._shutdown, ()) def register_package(self): ios_driver_api.register_package(self) def _dispatch(self, method, params): _result = None print_msg('--- --- --- --- --- ---') print_msg('%s <<< %s' % (method, params)) try: _result = SimpleXMLRPCServer.SimpleXMLRPCServer._dispatch( self, method, params) except Exception, e: print_err('%s - Error: %s' % (method, e)) print_err('%s - Traceback:\n%s' % (method, traceback.format_exc())) raise if method in XMLRPCServer.LOG_FILTERED_METHODS: print_msg('%s >>> Binary Data' % method) else: print_msg('%s >>> %s' % (method, _result)) self._last_interactive_time = datetime.datetime.fromtimestamp( time.time()) return _result