/// <summary> /// Stops the language server. /// </summary> public void Stop() { if (State != LanguageServerState.Stopped) { _tokenSource.Cancel(); State = LanguageServerState.Stopped; } }
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); }
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; } } }
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); }
public bool WaitForState(LanguageServerState desiredState) { return(WaitForState(desiredState, -1)); }
public bool WaitForState(LanguageServerState desiredState, TimeSpan timeout) { return(WaitForState(desiredState, (int)timeout.TotalMilliseconds)); }
/// <summary> /// Starts the language server (enables sending and receiving messages). /// </summary> public void Start() { State = LanguageServerState.WaitingForInitialization; Task.Factory.StartNew(_RunMessageLoop, _tokenSource.Token); }
public void WaitForState(LanguageServerState desiredState) { WaitForState(desiredState, TimeSpan.MaxValue); }