public static void ParseFile(ProjectFileDto fileModel, Action<FileOperationResponse> callback) { FileOperationRequest request = new FileOperationRequest(); // Set contextual identifiers request.UserId = 478; // hard-coded, for now request.ProjectId = fileModel.ProjectId; request.FileId = fileModel.Id; // Specify operations to perform request.SyncContent = new FileSyncContentRequest() { Content = fileModel.Content }; request.Parse = new FileParseRequest() { }; Task.Factory.StartNew(() => { var requestJson = JsonConvert.SerializeObject(request); #region Simulation of call to server var responseJson = Server_HandleStatefulFileOperationRequest(requestJson); #endregion var response = JsonConvert.DeserializeObject<FileOperationResponse>(responseJson); callback.Invoke(response); }); }
private static FileOperationResponse Server_HandleStatefulFileOperationRequest(FileOperationRequest request) { FileOperationResponse response = new FileOperationResponse(); ProjectModel projectModel = null; ProjectFileModel fileModel = null; try { projectModel = ServerProjectRepository.GetProject(request.UserId, request.ProjectId); if (projectModel == null) { response.SetError("Specified project could not be located."); return response; } fileModel = ServerProjectRepository.GetFile(request.UserId, request.ProjectId, request.FileId); if (fileModel == null) { response.SetError("Specified file could not be located within the project."); return response; } } catch (Exception ex) { response.SyncContent.SetError(ex); } // Set contextual identifiers on response response.UserId = request.UserId; response.ProjectId = request.ProjectId; response.FileId = request.FileId; // Now, handle each requested operation... if (request.SyncContent != null) { response.SyncContent = new FileSyncContentResponse(); fileModel.Content = request.SyncContent.Content; response.SyncContent.Status = ResponseStatus.OK; } if (request.Parse != null) { response.Parse = new FileParseResponse(); try { response.Parse.Errors = NRefactoryUtils.ParseFile(fileModel); response.Parse.Status = ResponseStatus.OK; } catch (Exception ex) { response.Parse.SetError(ex); } } if (request.CompleteCode != null) { response.CompleteCode = new FileCodeCompletionResponse(); try { var analysisRequest = new ProjectAnalysisRequest() { ProjectModel = projectModel, CodeCompletionParameters = new ProjectAnalysisCodeCompletionParameters() { FileId = request.FileId, Line = request.CompleteCode.LineNumber, Column = request.CompleteCode.ColumnNumber } }; var analysisResult = NRefactoryUtils.RunFullProjectAnalysis(analysisRequest); response.CompleteCode.CompletionOptions = analysisResult.CompletionOptions.Select(x => new FileCodeCompletionResult() { CompletionText = x.CompletionText, DisplayText = x.DisplayText }).ToArray(); response.CompleteCode.Status = ResponseStatus.OK; } catch (Exception ex) { response.CompleteCode.SetError(ex); } } response.Status = ResponseStatus.OK; return response; }