示例#1
0
        private void HandleRequest(string method, string requestId, JToken parameters)
        {
            RequestMethod requestMethod = null;

            requestMethods.TryGetValue(method, out requestMethod);
            if (requestMethod == null)
            {
                WriteServerLog(String.Format("No request handler was registered for method \"{0}\"", method));
            }
            else
            {
                RequestType requestType = requestMethod.Type;
                object      objParams   = null;
                if (parameters != null)
                {
                    objParams = parameters.ToObject(requestType.ParamsType);
                }
                try
                {
                    ResponseResultOrError resultOrError = requestMethod.HandleRequest(requestType, objParams);
                    Reply(requestId, resultOrError);
                }
                catch (Exception e)
                {
                    ResponseResultOrError error = new ResponseResultOrError()
                    {
                        code = ErrorCodes.InternalError, message = e.Message
                    };
                    Reply(requestId, error);
                }
            }
        }
示例#2
0
        private void HandleNotification(string method, JToken parameters)
        {
            NotificationMethod notificationMethod = null;

            notificationMethods.TryGetValue(method, out notificationMethod);
            if (notificationMethod == null)
            {
                WriteServerLog(String.Format("No notification handler was registered for method \"{0}\"", method));
            }
            else
            {
                NotificationType notificationType = notificationMethod.Type;
                object           objParams        = null;
                if (parameters != null)
                {
                    objParams = parameters.ToObject(notificationType.ParamsType);
                }
                try
                {
                    notificationMethod.HandleNotification(notificationType, objParams);
                }
                catch (Exception e)
                {
                    WriteServerLog(String.Format("Notification handler for {0} failed : {1}", notificationType.GetType().Name, e.Message));
                    ResponseResultOrError error = new ResponseResultOrError()
                    {
                        code = ErrorCodes.InternalError, message = e.Message, data = parameters?.ToString()
                    };
                    Reply(method, error);
                }
            }
        }
示例#3
0
        private void HandleResponse(string requestId, JToken result, JToken error)
        {
            ResponseWaitState responseWaitState = null;

            responsesExpected.TryGetValue(requestId, out responseWaitState);
            if (responseWaitState == null)
            {
                WriteServerLog(String.Format("No response was expected for request id \"{0}\"", requestId));
            }
            else
            {
                RequestType requestType = responseWaitState.RequestType;
                object      objResult   = null;
                if (result != null && requestType.ResultType != null)
                {
                    objResult = result.ToObject(requestType.ResultType);
                }
                object objErrorData = null;
                if (error != null && error["data"] != null && requestType.ErrorDataType != null)
                {
                    objErrorData = error["data"].ToObject(requestType.ErrorDataType);
                }

                ResponseResultOrError resultOrError = new ResponseResultOrError();
                resultOrError.result = objResult;
                if (error != null && error["code"] != null)
                {
                    resultOrError.code    = (int)error["code"];
                    resultOrError.message = (string)error["message"];
                    resultOrError.data    = objErrorData;
                }

                try
                {
                    responseWaitState.TaskCompletionSource.SetResult(resultOrError);
                }
                catch (Exception e)
                {
                    WriteServerLog(String.Format("Task completion for the response expected by request {0} of type {1} failed : {1}", requestId, requestType.GetType().Name, e.Message));
                }
            }
        }
示例#4
0
        private void Reply(string requestId, ResponseResultOrError resultOrError)
        {
            JObject jsonMessage = new JObject();

            PrepareJsonPRCMessage(jsonMessage);

            // Response properties
            jsonMessage["id"] = requestId;
            if (resultOrError.result != null)
            {
                jsonMessage["result"] = JToken.FromObject(resultOrError.result);
            }
            else if (resultOrError.code != null)
            {
                jsonMessage["error"] = JToken.FromObject(resultOrError);
            }

            //  Send text message
            messageServer.SendMessage(jsonMessage.ToString(Formatting.None));
        }
示例#5
0
        private void Reply(string requestId, ResponseResultOrError resultOrError)
        {
            JObject jsonMessage = new JObject();
            PrepareJsonPRCMessage(jsonMessage);

            // Response properties
            jsonMessage["id"] = requestId;
            if (resultOrError.result != null)
            {
                jsonMessage["result"] = JToken.FromObject(resultOrError.result);
            }
            else if (resultOrError.code != null)
            {
                jsonMessage["error"] = JToken.FromObject(resultOrError);
            }

            //  Send text message
            messageServer.SendMessage(jsonMessage.ToString(Formatting.None));
        }
示例#6
0
        private void HandleResponse(string requestId, JToken result, JToken error)
        {
            ResponseWaitState responseWaitState = null;
            responsesExpected.TryGetValue(requestId, out responseWaitState);
            if (responseWaitState == null)
            {
                WriteServerLog(String.Format("No response was expected for request id \"{0}\"", requestId));
            }
            else
            {
                RequestType requestType = responseWaitState.RequestType;
                object objResult = null;
                if (result != null && requestType.ResultType != null)
                {
                    objResult = result.ToObject(requestType.ResultType);
                }
                object objErrorData = null;
                if (error != null && error["data"] != null && requestType.ErrorDataType != null)
                {
                    objErrorData = error["data"].ToObject(requestType.ErrorDataType);
                }

                ResponseResultOrError resultOrError = new ResponseResultOrError();
                resultOrError.result = objResult;
                if (error != null && error["code"] != null)
                {
                    resultOrError.code = (int)error["code"];
                    resultOrError.message = (string)error["message"];
                    resultOrError.data = objErrorData;
                }

                try
                {
                    responseWaitState.TaskCompletionSource.SetResult(resultOrError);
                }
                catch (Exception e)
                {
                    WriteServerLog(String.Format("Task completion for the response expected by request {0} of type {1} failed : {1}", requestId, requestType.GetType().Name, e.Message));
                }
            }
        }
示例#7
0
 private void HandleRequest(string method, string requestId, JToken parameters)
 {
     RequestMethod requestMethod = null;
     requestMethods.TryGetValue(method, out requestMethod);
     if (requestMethod == null)
     {
         WriteServerLog(String.Format("No request handler was registered for method \"{0}\"", method));
     }
     else
     {
         RequestType requestType = requestMethod.Type;
         object objParams = null;
         if (parameters != null)
         {
             objParams = parameters.ToObject(requestType.ParamsType);
         }
         try
         {
             ResponseResultOrError resultOrError = requestMethod.HandleRequest(requestType, objParams);
             Reply(requestId, resultOrError);
         }
         catch(Exception e)
         {
             ResponseResultOrError error = new ResponseResultOrError() { code = ErrorCodes.InternalError, message = e.Message };
             Reply(requestId, error);
         }
     }
 }
示例#8
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;
 }
示例#9
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;
 }
示例#10
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;
 }
示例#11
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;
 }
示例#12
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;
 }
示例#13
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;
 }
示例#14
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;
 }
示例#15
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;
 }
示例#16
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;
 }
示例#17
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;
 }
示例#18
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;
 }