def __init__(self, user_options):
     self._user_options = user_options
     self._server_popen = None
     self._setup_server()
     self._keep_alive_thread = YCMDKeepAlive()
     self._keep_alive_thread.start()
 def __init__(self, user_options):
     self._user_options = user_options
     self._server_popen = None
     self._setup_server()
     self._keep_alive_thread = YCMDKeepAlive()
     self._keep_alive_thread.start()
class SublimeYouCompleteMe(object):
    """ A wrapper for the YCMD server """
    def __init__(self, user_options):
        self._user_options = user_options
        self._server_popen = None
        self._setup_server()
        self._keep_alive_thread = YCMDKeepAlive()
        self._keep_alive_thread.start()

    def _setup_server(self):
        """ Start the YCMD server """
        port = utils.get_unused_localhost_port()
        with tempfile.NamedTemporaryFile(mode="w", delete=False) as options_file:
            # This file is deleted by YCMD when it starts
            hmac_secret = os.urandom(16)
            options_dict = self._user_options.copy()
            options_dict["hmac_secret"] = base64.b64encode(hmac_secret).\
                decode(encoding="utf-8")
            json.dump(options_dict, options_file)
            options_file.flush()

            command = [utils.path_to_python(),
                       os.path.join("ycmd", "ycmd"),
                       "--port={0}".format(port),
                       "--options_file={0}".format(options_file.name),
                       # '--log={0}'.format( self._user_options[ 'server_log_level' ] ),
                       "--idle_suicide_seconds={0}".format(
                            SERVER_IDLE_SUICIDE_SECONDS)]

        # if not self._user_options[ 'server_use_vim_stdout' ]:
        #   filename_format = os.path.join( utils.PathToTempDir(),
        #                                   'server_{port}_{std}.log' )

        #   self._server_stdout = filename_format.format( port = server_port,
        #                                                 std = 'stdout' )
        #   self._server_stderr = filename_format.format( port = server_port,
        #                                                 std = 'stderr' )
        #   args.append('--stdout={0}'.format( self._server_stdout ))
        #   args.append('--stderr={0}'.format( self._server_stderr ))

        #   if self._user_options[ 'server_keep_logfiles' ]:
        #     args.append('--keep_logfiles')

        self._server_popen = subprocess.Popen(command,
                                              stdout=None, # subprocess.PIPE
                                              stderr=None, # subprocess.PIPE
                                              cwd=DIR_OF_THIS_SCRIPT)
        YCMDRequest.server_base_URI = "http://127.0.0.1:{0}".format(port)
        YCMDRequest.shared_hmac_secret = hmac_secret


    def is_server_alive(self):
        """ Test if the server process is alive """
        # When the process hasn't finished yet, poll() returns None.
        return self._server_popen.poll() is None


    def server_shutdown(self):
        """ Shutdown the server """
        if self.is_server_alive():
            self._server_popen.terminate()
            self._keep_alive_thread.stop()
class SublimeYouCompleteMe(object):
    """ A wrapper for the YCMD server """
    def __init__(self, user_options):
        self._user_options = user_options
        self._server_popen = None
        self._setup_server()
        self._keep_alive_thread = YCMDKeepAlive()
        self._keep_alive_thread.start()

    def _setup_server(self):
        """ Start the YCMD server """
        port = utils.get_unused_localhost_port()
        with tempfile.NamedTemporaryFile(mode="w",
                                         delete=False) as options_file:
            # This file is deleted by YCMD when it starts
            hmac_secret = os.urandom(16)
            options_dict = self._user_options.copy()
            options_dict["hmac_secret"] = base64.b64encode(hmac_secret).\
                decode(encoding="utf-8")
            json.dump(options_dict, options_file)
            options_file.flush()

            command = [
                utils.path_to_python(),
                os.path.join("ycmd", "ycmd"),
                "--port={0}".format(port),
                "--options_file={0}".format(options_file.name),
                # '--log={0}'.format( self._user_options[ 'server_log_level' ] ),
                "--idle_suicide_seconds={0}".format(SERVER_IDLE_SUICIDE_SECONDS
                                                    )
            ]

        # if not self._user_options[ 'server_use_vim_stdout' ]:
        #   filename_format = os.path.join( utils.PathToTempDir(),
        #                                   'server_{port}_{std}.log' )

        #   self._server_stdout = filename_format.format( port = server_port,
        #                                                 std = 'stdout' )
        #   self._server_stderr = filename_format.format( port = server_port,
        #                                                 std = 'stderr' )
        #   args.append('--stdout={0}'.format( self._server_stdout ))
        #   args.append('--stderr={0}'.format( self._server_stderr ))

        #   if self._user_options[ 'server_keep_logfiles' ]:
        #     args.append('--keep_logfiles')

        self._server_popen = subprocess.Popen(
            command,
            stdout=None,  # subprocess.PIPE
            stderr=None,  # subprocess.PIPE
            cwd=DIR_OF_THIS_SCRIPT)
        YCMDRequest.server_base_URI = "http://127.0.0.1:{0}".format(port)
        YCMDRequest.shared_hmac_secret = hmac_secret

    def is_server_alive(self):
        """ Test if the server process is alive """
        # When the process hasn't finished yet, poll() returns None.
        return self._server_popen.poll() is None

    def server_shutdown(self):
        """ Shutdown the server """
        if self.is_server_alive():
            self._server_popen.terminate()
            self._keep_alive_thread.stop()