public static EvalResult CreateErrorResult(string code, string consoleOut, TimeSpan compileTime, ImmutableArray <Diagnostic> compileErrors) { var ex = new CompilationErrorException(string.Join("\n", compileErrors.Select(a => a.GetMessage())), compileErrors); var errorResult = new EvalResult { Code = code, CompileTime = compileTime, ConsoleOut = consoleOut, Exception = ex.Message, ExceptionType = ex.GetType().Name, ExecutionTime = TimeSpan.FromMilliseconds(0), ReturnValue = null, ReturnTypeName = null }; return(errorResult); }
private async Task <(EvalResult, HttpStatusCode)> Execute(HttpClient client, string expr) { using (var response = await client.PostAsPlainTextAsync("/eval", expr)) { EvalResult result = null; if (response.Content != null) { var content = await response.Content.ReadAsStringAsync(); Log.WriteLine(content); if (response.StatusCode == HttpStatusCode.OK || response.StatusCode == HttpStatusCode.BadRequest || response.StatusCode == HttpStatusCode.Unauthorized) { result = JsonConvert.DeserializeObject <EvalResult>(content, JsonSettings); } } return(result, response.StatusCode); } }
public async Task <EvalResult> RunEvalAsync(string code) { var sb = new StringBuilder(); var textWr = new ConsoleLikeStringWriter(sb); var sw = Stopwatch.StartNew(); var eval = CSharpScript.Create(code, Options, typeof(Globals)) .WithLanguageVersion(LanguageVersion.CSharp7_1); var compilation = eval.GetCompilation().WithAnalyzers(Analyzers); var compileResult = await compilation.GetAllDiagnosticsAsync(); var compileErrors = compileResult.Where(a => a.Severity == DiagnosticSeverity.Error).ToImmutableArray(); sw.Stop(); var compileTime = sw.Elapsed; if (compileErrors.Length > 0) { return(EvalResult.CreateErrorResult(code, sb.ToString(), sw.Elapsed, compileErrors)); } var globals = new Globals { Random = random, Console = textWr }; sw.Restart(); var result = await eval.RunAsync(globals, ex => true); sw.Stop(); return(new EvalResult(result, sb.ToString(), sw.Elapsed, compileTime)); }
private async Task <(EvalResult, HttpStatusCode)> Execute(string expr) { using (var response = await Client.PostAsPlainTextAsync("/eval", expr)) { EvalResult result = null; if (response.Content != null) { var content = await response.Content.ReadAsStringAsync(); Log.WriteLine(content); if (response.StatusCode == HttpStatusCode.OK || response.StatusCode == HttpStatusCode.BadRequest) { result = JsonConvert.DeserializeObject <EvalResult>(content, JsonSettings); } else { throw new WebException($"Unexpected status code: {response.StatusCode}"); } } return(result, response.StatusCode); } }