예제 #1
0
 /// <summary>
 /// Stops the language server.
 /// </summary>
 public void Stop()
 {
     if (State != LanguageServerState.Stopped)
     {
         _tokenSource.Cancel();
         State = LanguageServerState.Stopped;
     }
 }
예제 #2
0
        public bool WaitForState(LanguageServerState desiredState, int timeoutMilliseconds)
        {
            var startTime = Environment.TickCount;

            do
            {
                if (State == desiredState)
                {
                    return(true);
                }
                Task.Delay(10).Wait();
            } while (timeoutMilliseconds < 0 || Environment.TickCount - startTime < timeoutMilliseconds);
            return(false);
        }
예제 #3
0
        public void WaitForState(LanguageServerState desiredState, TimeSpan timeout)
        {
            DateTime expires = DateTime.Now.Add(timeout);

            while (DateTime.Now < expires)
            {
                Task.Delay(2).Wait();

                if (State == desiredState)
                {
                    break;
                }
            }
        }
예제 #4
0
        private void _HandleRequest(RequestMessage message)
        {
            Debug("Handle Request", message);

            RequestContext context = new RequestContext(message, this);

            _requestContexts.Add(context);

            if (message.Method.Equals(CoreMethods.CancelRequest))
            {
                // remove the duplicate context we just added
                _requestContexts.Remove(context);

                // get the original request context
                RequestContext cancelContext = _requestContexts.FirstOrDefault(x => x.Request.Id.Equals(message.Id));
                cancelContext?.Cancel();
            }

            else if (message.Method.Equals(CoreMethods.Initialize))
            {
                State = LanguageServerState.Started;

                InitializeParams parameters = message.Params.ToObject <InitializeParams>();
                Initialize?.Invoke(this, parameters);

                InitializeResult result = new InitializeResult
                {
                    Capabilities = _serverCapabilities
                };

                SendResponseAsync(message.Id, result).Wait();
            }

            else if (message.Method.Equals(CoreMethods.Shutdown))
            {
                SendResponseAsync(message.Id, null).Wait();
            }

            RequestReceived?.Invoke(this, context);
        }
예제 #5
0
 public bool WaitForState(LanguageServerState desiredState)
 {
     return(WaitForState(desiredState, -1));
 }
예제 #6
0
 public bool WaitForState(LanguageServerState desiredState, TimeSpan timeout)
 {
     return(WaitForState(desiredState, (int)timeout.TotalMilliseconds));
 }
예제 #7
0
 /// <summary>
 /// Starts the language server (enables sending and receiving messages).
 /// </summary>
 public void Start()
 {
     State = LanguageServerState.WaitingForInitialization;
     Task.Factory.StartNew(_RunMessageLoop, _tokenSource.Token);
 }
예제 #8
0
 public void WaitForState(LanguageServerState desiredState)
 {
     WaitForState(desiredState, TimeSpan.MaxValue);
 }