text: import time
  
  from compas.rpc.services.default import start_service
  
  try:
      from xmlrpclib import ServerProxy
  except ImportError:
      from xmlrpc.client import ServerProxy
  
  
  def start(port, autoreload, **kwargs):
      start_service(port, autoreload)
  
  
  def stop(port, **kwargs):
      print('Trying to stop remote RPC proxy...')
      server = ServerProxy('http://127.0.0.1:{}'.format(port))
  
      success = False
      count = 5
      while count:
          try:
              server.ping()
          except Exception:
              time.sleep(0.1)
              count -= 1
              print("    {} attempts left.".format(count))
          else:
              success = True
              break
  
      if not success:
          print('RPC server did not respond. Maybe already stopped.')
      else:
          server.remote_shutdown()
          print('RPC server stopped')
  
  
  def main():
      import argparse
  
      parser = argparse.ArgumentParser(
          description='COMPAS RPC command-line utility')
  
      commands = parser.add_subparsers(help='Valid RPC commands')
  
      # Command: start
      start_command = commands.add_parser('start', help='Start RPC server')
      start_command.add_argument(
          '--port', '-p', action='store', default=1753, type=int, help='RPC port number')
      start_command.add_argument('--autoreload', dest='autoreload', action='store_true', help='Autoreload modules')
      start_command.add_argument('--no-autoreload', dest='autoreload', action='store_false', help='Do not autoreload modules')
      start_command.set_defaults(autoreload=True, func=start)
  
      # Command: stop
      stop_command = commands.add_parser(
          'stop', help='Try to stop a remote RPC server')
      stop_command.add_argument(
          '--port', '-p', action='store', default=1753, type=int, help='RPC port number')
      stop_command.set_defaults(func=stop)
  
      # Invoke
      args = parser.parse_args()
      if hasattr(args, 'func'):
          args.func(**vars(args))
      else:
          parser.print_help()
  
  
  if __name__ == '__main__':
      main()
  