예제 #1
0
        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);
        }
예제 #2
0
        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);
            }
        }
예제 #3
0
파일: Eval.cs 프로젝트: jrusbatch/CSDiscord
        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));
        }
예제 #4
0
        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);
            }
        }