Beispiel #1
0
        /// <summary>
        /// LSPサーバを起動する
        /// </summary>
        /// <param name="serverConfigFilename"></param>
        /// <param name="currentSourceCodeDirectory"></param>
        /// <returns></returns>
        IWorker IHidemaruLspBackEndServer.CreateWorker(
            string ServerName,
            string ExcutablePath,
            string Arguments,
            string RootUri,
            string WorkspaceConfig,
            long HidemaruProcessId)
        {
            var logger = LogManager.GetCurrentClassLogger();

            try
            {
                var holderKey = new LspKey(ServerName, RootUri);
                if (workerHolder_.ContainsKey(holderKey))
                {
                    var w = workerHolder_[holderKey];
                    w.Used();
                    logger.Debug("w.referenceCounter={0}", w.referenceCounter);
                    return(w.GetWorker());
                }

                var ins = new Worker(holderKey);
                var ret = ins.Start(ServerName,
                                    ExcutablePath,
                                    Arguments,
                                    RootUri,
                                    WorkspaceConfig,
                                    HidemaruProcessId);
                if (ret == false)
                {
                    return(null);
                }
                var value = new WorkerPair(ins);
                logger.Debug("value.referenceCounter={0}", value.referenceCounter);
                workerHolder_[holderKey] = value;
                return(ins);
            }catch (Exception e)
            {
                logger.Error(e);
            }
            return(null);
        }
Beispiel #2
0
 public Worker(LspKey key)
 {
     this.key = key;
 }