Beispiel #1
0
 /// <summary>
 /// Register a description of all the request methods supported by the RPC server
 /// </summary>
 public void RegisterRequestMethod(RequestType requestType, RequestHandler requestHandler)
 {
     requestMethods.Add(requestType.Method, new RequestMethod() { Type = requestType, HandleRequest = requestHandler });
 }
 public ResponseWaitState(RequestType requestType, string requestId, TaskCompletionSource<ResponseResultOrError> taskCompletionSource)
 {
     this.RequestType = requestType;
     this.RequestId = requestId;
     this.TaskCompletionSource = taskCompletionSource;
 }
 public ResponseWaitState(RequestType requestType, string requestId, TaskCompletionSource <ResponseResultOrError> taskCompletionSource)
 {
     this.RequestType          = requestType;
     this.RequestId            = requestId;
     this.TaskCompletionSource = taskCompletionSource;
 }
Beispiel #4
0
        /// <summary>
        /// Send an async request to the client and await later for the response or error
        /// </summary>
        public Task<ResponseResultOrError> SendRequest(RequestType requestType, object parameters)
        {
            JObject jsonMessage = new JObject();
            PrepareJsonPRCMessage(jsonMessage);

            // Generate a unique id for the request
            int id = Interlocked.Increment(ref sequenceNumber);
            string requestId = id.ToString();
            jsonMessage["id"] = requestId;

            jsonMessage["method"] = requestType.Method;
            if (parameters != null)
            {
                jsonMessage["params"] = JToken.FromObject(parameters);
            }

            //  Send text message
            messageServer.SendMessage(jsonMessage.ToString(Formatting.None));

            // Remember all elements which will be needed to handle correctly the response to the request
            TaskCompletionSource<ResponseResultOrError> taskCompletionSource = new TaskCompletionSource<ResponseResultOrError>();
            ResponseWaitState responseWaitState = new ResponseWaitState(requestType, requestId, taskCompletionSource);
            responsesExpected.Add(requestId, responseWaitState);

            // The completion of the task will be signaled later, when the response arrives
            return taskCompletionSource.Task;
        }
Beispiel #5
0
 private ResponseResultOrError CallSignatureHelp(RequestType requestType, object parameters)
 {
     ResponseResultOrError resultOrError = null;
     try
     {
         SignatureHelp result = OnSignatureHelp((TextDocumentIdentifier)parameters);
         resultOrError = new ResponseResultOrError() { result = result };
     }
     catch (Exception e)
     {
         resultOrError = new ResponseResultOrError() { code = ErrorCodes.InternalError, message = e.Message };
     }
     return resultOrError;
 }
Beispiel #6
0
 private ResponseResultOrError CallWorkspaceSymbol(RequestType requestType, object parameters)
 {
     ResponseResultOrError resultOrError = null;
     try
     {
         List<SymbolInformation> result = OnWorkspaceSymbol((WorkspaceSymbolParams)parameters);
         resultOrError = new ResponseResultOrError() { result = result };
     }
     catch (Exception e)
     {
         resultOrError = new ResponseResultOrError() { code = ErrorCodes.InternalError, message = e.Message };
     }
     return resultOrError;
 }
Beispiel #7
0
 private ResponseResultOrError CallRename(RequestType requestType, object parameters)
 {
     ResponseResultOrError resultOrError = null;
     try
     {
         WorkspaceEdit result = OnRename((RenameParams)parameters);
         resultOrError = new ResponseResultOrError() { result = result };
     }
     catch (Exception e)
     {
         resultOrError = new ResponseResultOrError() { code = ErrorCodes.InternalError, message = e.Message };
     }
     return resultOrError;
 }
Beispiel #8
0
 private ResponseResultOrError CallShutdown(RequestType requestType, object parameters)
 {
     ResponseResultOrError resultOrError = null;
     try
     {
         shutdownReceived = true;
         OnShutdown();
         resultOrError = new ResponseResultOrError() { result = null };
     }
     catch (Exception e)
     {
         resultOrError = new ResponseResultOrError() { code = ErrorCodes.InternalError, message = e.Message };
     }
     return resultOrError;
 }
Beispiel #9
0
 private ResponseResultOrError CallInitialize(RequestType requestType, object parameters)
 {
     ResponseResultOrError resultOrError = null;
     try
     {
         InitializeResult result = OnInitialize((InitializeParams)parameters);
         resultOrError = new ResponseResultOrError() { result = result };
     }
     catch (Exception e)
     {
         resultOrError = new ResponseResultOrError() { code = ErrorCodes.InternalError, message = e.Message, data = new InitializeError() { retry = false } };
     }
     return resultOrError;
 }
Beispiel #10
0
 private ResponseResultOrError CallReferences(RequestType requestType, object parameters)
 {
     ResponseResultOrError resultOrError = null;
     try
     {
         List<Location> result = OnReferences((ReferenceParams)parameters);
         resultOrError = new ResponseResultOrError() { result = result };
     }
     catch (Exception e)
     {
         resultOrError = new ResponseResultOrError() { code = ErrorCodes.InternalError, message = e.Message };
     }
     return resultOrError;
 }
Beispiel #11
0
 private ResponseResultOrError CallHoverRequest(RequestType requestType, object parameters)
 {
     ResponseResultOrError resultOrError = null;
     try
     {
         Hover result =  OnHover((TextDocumentPosition)parameters);
         resultOrError = new ResponseResultOrError() { result = result };
     }
     catch (Exception e)
     {
         resultOrError = new ResponseResultOrError() { code = ErrorCodes.InternalError, message = e.Message };
     }
     return resultOrError;
 }
Beispiel #12
0
 private ResponseResultOrError CallDocumentSymbol(RequestType requestType, object parameters)
 {
     ResponseResultOrError resultOrError = null;
     try
     {
         List<SymbolInformation> result = OnDocumentSymbol((TextDocumentIdentifier)parameters);
         resultOrError = new ResponseResultOrError() { result = result };
     }
     catch (Exception e)
     {
         resultOrError = new ResponseResultOrError() { code = ErrorCodes.InternalError, message = e.Message };
     }
     return resultOrError;
 }
Beispiel #13
0
 private ResponseResultOrError CallDocumentRangeFormatting(RequestType requestType, object parameters)
 {
     ResponseResultOrError resultOrError = null;
     try
     {
         List<TextEdit> result = OnDocumentRangeFormatting((DocumentRangeFormattingParams)parameters);
         resultOrError = new ResponseResultOrError() { result = result };
     }
     catch (Exception e)
     {
         resultOrError = new ResponseResultOrError() { code = ErrorCodes.InternalError, message = e.Message };
     }
     return resultOrError;
 }
Beispiel #14
0
 private ResponseResultOrError CallCompletionResolve(RequestType requestType, object parameters)
 {
     ResponseResultOrError resultOrError = null;
     try
     {
         CompletionItem result = OnCompletionResolve((CompletionItem)parameters);
         resultOrError = new ResponseResultOrError() { result = result };
     }
     catch (Exception e)
     {
         resultOrError = new ResponseResultOrError() { code = ErrorCodes.InternalError, message = e.Message };
     }
     return resultOrError;
 }
Beispiel #15
0
 // --- Generic notification and request handlers ---
 private ResponseResultOrError CallCodeAction(RequestType requestType, object parameters)
 {
     ResponseResultOrError resultOrError = null;
     try
     {
         List<Command> result = OnCodeAction((CodeActionParams)parameters);
         resultOrError = new ResponseResultOrError() { result = result };
     }
     catch(Exception e)
     {
         resultOrError = new ResponseResultOrError() { code = ErrorCodes.InternalError, message = e.Message };
     }
     return resultOrError;
 }