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); } } }
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); } } }
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)); } } }
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)); }
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); } } }
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; }
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; }
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; }
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; }
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; }
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; }
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; }
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; }
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; }
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; }
// --- 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; }