public async Task <ActionResult> EditCode(CodeItem codeItem, string returnurl)
        {
            if (ModelState.IsValid)
            {
                if (codeItem.Id == 0)
                {
                    CodeRunResultViewModel viewModel = new CodeRunResultViewModel();
                    var codetext     = codeItem.CodeText.Replace("\r", "").Replace("\n", "");
                    var codecompiler = await _codeProcessor.GetCodeCompilerFromText(codetext);

                    codecompiler.CompileCode();

                    if (!codecompiler.IsCodeCompiled)
                    {
                        viewModel.IsSucceeded = false;
                        viewModel.ErrorsText  = codecompiler.CompilationErrors;
                        return(View("CodeRunResult", viewModel));
                    }

                    var result = await _codeProcessor.SaveCompiledCode(codecompiler);
                }
                else
                {
                    await _repository.SaveCodeItemAsync(codeItem);
                }


                return(returnurl != null?Redirect(returnurl) : Redirect(Url.Action("Index", "CodeItem")));
            }

            return(View(codeItem));
        }
        public async Task <ActionResult> RunCode(int id, string returnurl)
        {
            CodeRunResultViewModel viewModel = new CodeRunResultViewModel();

            var codeitem = await _repository.GetCodeItemAsync(id);

            ViewBag.ReturnUrl = returnurl;

            if (codeitem == null)
            {
                throw new HttpException(404, "Item not found");
            }

            var codecompiler = await _codeProcessor.GetCodeCompilerFromText(codeitem.CodeText);

            await codecompiler.CompileCodeAsync();

            if (!codecompiler.IsCodeCompiled)
            {
                viewModel.IsSucceeded = false;
                viewModel.ErrorsText  = codecompiler.CompilationErrors;
                return(View("CodeRunResult", viewModel));
            }

            var coderun = await _codeProcessor.GetCodeRunner(codecompiler);

            await coderun.RunCodeAsync();

            viewModel.IsSucceeded = String.IsNullOrEmpty(coderun.LastErrors);
            viewModel.RunningTime = coderun.ExecutionTime.ToString();
            viewModel.CodeOutput  = coderun.CodeOutput;
            viewModel.ErrorsText  = coderun.LastErrors;

            return(View("CodeRunResult", viewModel));
        }
        public async Task <ActionResult> SendCode(HomeViewModel viewModel)
        {
            if (ModelState.IsValid)
            {
                CodeRunResultViewModel resultViewModel = new CodeRunResultViewModel();
                ViewBag.ReturnUrl = Url.Action("Index");

                try
                {
                    var codetext = viewModel.CodeText.Replace("\r", "").Replace("\n", "");

                    var compiler = await _codeRunner.GetCodeCompilerFromText(viewModel.CodeText);

                    await compiler.CompileCodeAsync();

                    if (!compiler.IsCodeCompiled)
                    {
                        resultViewModel.IsSucceeded = false;
                        resultViewModel.ErrorsText  = compiler.CompilationErrors;
                        return(View("AnalyzerResult", resultViewModel));
                    }

                    //var codeItem = await _codeRunner.SaveCompiledCode(compiler);

                    var coderun = await _codeRunner.GetCodeRunner(compiler);

                    await coderun.RunCodeAsync();

                    resultViewModel.IsSucceeded = String.IsNullOrEmpty(coderun.LastErrors);
                    resultViewModel.RunningTime = coderun.ExecutionTime.ToString();
                    resultViewModel.CodeOutput  = coderun.CodeOutput;
                    resultViewModel.ErrorsText  = coderun.LastErrors;
                }
                catch (Exception ex)
                {
                    resultViewModel.IsSucceeded = false;
                    resultViewModel.ErrorsText  = ex.Message;
                }

                return(View("AnalyzerResult", resultViewModel));
            }
            else
            {
                return(View("Index"));
            }
        }