Esempio n. 1
0
        public CmResult RunJava(string path)
        {
            if (!FileHelper.IsExists(path))
            {
                return(CmResult.BuildFail("", "文件不存在"));
            }
            if (!path.EndsWith(".java"))
            {
                return(CmResult.BuildFail("", "文件类型不正确"));
            }
            CmResult cr = BuildJava(path);

            if (!cr.Success)
            {
                return(cr);
            }
            if (!FileHelper.IsExists($"{cr.Message}.class"))
            {
                return(CmResult.BuildFail("", "文件不存在1"));
            }
            string classPath = FileHelper.GetDir(path);

            string className = FileHelper.GetName(path).Replace(".java", "");

            return(BuildCmm($"java -classpath {classPath} -Dfile.encoding=utf8 {className}"));
        }
Esempio n. 2
0
        public APIReturn RunJava(string code)
        {
            if (string.IsNullOrEmpty(code))
            {
                APIReturn.BuildFail("code不能为空");
            }

            string codeStr = code.Base64ToString();

            if (string.IsNullOrEmpty(code))
            {
                APIReturn.BuildFail("无效的code");
            }

            string path = Path.Combine(GetNewPath(), "Test.java");

            //System.IO.File.WriteAllText(path, codeStr, Encoding.UTF8);
            using (StreamWriter sw = System.IO.File.CreateText(path))
            {
                sw.WriteLine(codeStr);
                sw.Flush();
            }
            CmResult cr = cmd.RunJava(path);

            return(cr.Success ? APIReturn.BuildSuccess(cr.Message) : APIReturn.BuildFail(cr.ExecMsg));
        }
Esempio n. 3
0
 // 无需编译
 public CmResult Python(string path)
 {
     if (!FileHelper.IsExists(path))
     {
         return(CmResult.BuildFail("", "文件不存在"));
     }
     if (!path.EndsWith(".py"))
     {
         return(CmResult.BuildFail("", "文件类型不正确"));
     }
     return(BuildHelper.BuildCmm($"python {path}"));
 }
Esempio n. 4
0
        public async Task <IActionResult> C([FromRoute] string act, string code)
        {
            if (string.IsNullOrEmpty(act))
            {
                return(APIReturn.BuildFail("无效的请求"));
            }
            if (string.IsNullOrEmpty(code))
            {
                return(APIReturn.BuildFail("code不能为空"));
            }
            string codeStr = code.Base64ToString();

            if (string.IsNullOrEmpty(codeStr))
            {
                return(APIReturn.BuildFail("无效的code"));
            }

            CmResult cm = null;

            if ("c".Equals(act))
            {
                cm = await coreService.C(codeStr);
            }
            else if ("cpp".Equals(act))
            {
                cm = await coreService.CPlusPlus(codeStr);
            }
            else if ("java".Equals(act))
            {
                cm = await coreService.Java(codeStr);
            }
            else if ("python".Equals(act))
            {
                cm = await coreService.Python(codeStr);
            }
            else if ("csharp".Equals(act))
            {
                cm = await coreService.CSharp(codeStr);
            }
            else if ("nodejs".Equals(act))
            {
                cm = await coreService.Nodejs(codeStr);
            }
            else
            {
                cm = CmResult.BuildFail("", "无效的请求");
            }
            if (cm.Success)
            {
                return(APIReturn.BuildSuccess(cm.Message));
            }
            return(APIReturn.BuildFail(cm.ExecMsg));
        }
Esempio n. 5
0
 // 无需编译
 public CmResult Nodejs(string path)
 {
     if (!FileHelper.IsExists(path))
     {
         return(CmResult.BuildFail("", "文件不存在"));
     }
     if (!path.EndsWith(".js"))
     {
         return(CmResult.BuildFail("", "文件类型不正确"));
     }
     return(BuildHelper.BuildCmm($"node {path}"));
 }
Esempio n. 6
0
        public CmResult CPlusPlus(string path)
        {
            CmResult cr = build.CPlusPlus(path);

            if (!cr.Success)
            {
                return(cr);
            }
            if (!FileHelper.IsExists(cr.Message))
            {
                return(CmResult.BuildFail("", "编译文件不存在"));
            }
            return(BuildHelper.BuildCmm($"{cr.Message}"));
        }
Esempio n. 7
0
 public CmResult RunCSharp(string path)
 {
     try
     {
         object result = CSharpScriptEngine.Execute(path + "return Test.Main();");
         if (result == null)
         {
             return(CmResult.BuildSuccess("执行成功:没有返回值"));
         }
         return(CmResult.BuildSuccess(string.IsNullOrEmpty(result.ToString()) ? "执行成功" : result.ToString()));
     }
     catch (Exception ex)
     {
         return(CmResult.BuildFail("执行失败", ex.StackTrace));
     }
 }
Esempio n. 8
0
        private CmResult BuildJava(string path)
        {
            if (!FileHelper.IsExists(path))
            {
                return(CmResult.BuildFail("", "文件不存在"));
            }
            //string dir = FileHelper.GetDir(path);
            CmResult cr = BuildCmm($"javac -encoding utf8 {path}");

            if (!cr.Success)
            {
                return(cr);
            }
            string runName = path.Substring(0, path.LastIndexOf(".java"));

            return(CmResult.BuildSuccess(runName));
        }
Esempio n. 9
0
        public CmResult C(string path)
        {
            if (!FileHelper.IsExists(path))
            {
                return(CmResult.BuildFail("", "文件不存在"));
            }
            string   dir   = FileHelper.GetDir(path);
            string   guid  = Guid.NewGuid().ToString("N");
            string   runsh = Path.Combine(dir, guid);
            CmResult cr    = BuildHelper.BuildCmm($"gcc {path} -o {runsh}");

            if (cr.Success)
            {
                return(CmResult.BuildSuccess(Path.Combine(dir, $"./{guid}")));
            }
            return(cr);
        }
Esempio n. 10
0
        public Task <CmResult> Java(string code)
        {
            Match match = Regex.Match(code, @"public class\s+(?<classname>\w+)\s+");

            if (!match.Success)
            {
                return(Task.Run(() => { return CmResult.BuildFail("", "找不到public class类"); }));
            }
            string className = match.Groups["classname"].Value;
            string path      = Path.Combine(StaticVariable.NowPath, $"{className}.java");

            using (StreamWriter sw = File.CreateText(path))
            {
                sw.WriteLine(code);
                sw.Flush();
            }
            return(Task.Run(() => { return run.Java(path); }));
        }
Esempio n. 11
0
        public CmResult Java(string path)
        {
            CmResult cr = build.Java(path);

            if (!cr.Success)
            {
                return(cr);
            }
            if (!FileHelper.IsExists($"{cr.Message}.class"))
            {
                return(CmResult.BuildFail("", "执行文件不存在"));
            }
            string classPath = FileHelper.GetDir(path);

            string className = FileHelper.GetName(path).Replace(".java", "");

            return(BuildHelper.BuildCmm($"java -classpath {classPath} -Dfile.encoding=utf8 {className}"));
        }
Esempio n. 12
0
        public APIReturn RunCsharp(string code)
        {
            if (string.IsNullOrEmpty(code))
            {
                APIReturn.BuildFail("code不能为空");
            }

            string codeStr = code.Base64ToString();

            if (string.IsNullOrEmpty(code))
            {
                APIReturn.BuildFail("无效的code");
            }

            CmResult cr = cmd.RunCSharp(codeStr);

            return(cr.Success ? APIReturn.BuildSuccess(cr.Message) : APIReturn.BuildFail(cr.ExecMsg));
        }
Esempio n. 13
0
 public CmResult CSharp(string path)
 {
     try
     {
         object result = BuildHelper.Execute(path + "return Test.Main();");
         if (result == null)
         {
             return(CmResult.BuildSuccess("执行成功:没有返回值"));
         }
         if ("exec long time".Equals(result.ToString()))
         {
             return(CmResult.BuildFail("执行失败", $"执行时间超过{StaticVariable.RUN_MILL}ms,代码中可能包含死循环"));
         }
         return(CmResult.BuildSuccess(string.IsNullOrEmpty(result.ToString()) ? "执行成功" : result.ToString()));
     }
     catch (Exception ex)
     {
         return(CmResult.BuildFail("执行失败", ex.StackTrace));
     }
 }
Esempio n. 14
0
        public CmResult Java(string path)
        {
            if (!FileHelper.IsExists(path))
            {
                return(CmResult.BuildFail("", "文件不存在"));
            }
            if (!path.EndsWith(".java"))
            {
                return(CmResult.BuildFail("", "文件类型不正确"));
            }
            CmResult cr = BuildHelper.BuildCmm($"javac -encoding utf8 {path}");

            if (!cr.Success)
            {
                return(cr);
            }
            string runName = path.Substring(0, path.LastIndexOf(".java"));

            return(CmResult.BuildSuccess(runName));
        }
Esempio n. 15
0
        public APIReturn RunCPlusPlus(string code)
        {
            if (string.IsNullOrEmpty(code))
            {
                APIReturn.BuildFail("code不能为空");
            }

            string codeStr = code.Base64ToString();

            if (string.IsNullOrEmpty(code))
            {
                APIReturn.BuildFail("无效的code");
            }

            string path = Path.Combine(GetNewPath(), $"{Guid.NewGuid().ToString("N")}.cpp");

            System.IO.File.WriteAllText(path, codeStr, Encoding.UTF8);
            CmResult cr = cmd.RunCPlusPlus(path);

            return(cr.Success ? APIReturn.BuildSuccess(cr.Message) : APIReturn.BuildFail(cr.ExecMsg));
        }
Esempio n. 16
0
        public CmResult RunCPlusPlus(string path)
        {
            if (!FileHelper.IsExists(path))
            {
                return(CmResult.BuildFail("", "文件不存在"));
            }

            CmResult cr = BuildCPlusPlus(path);

            if (!cr.Success)
            {
                return(cr);
            }

            if (!FileHelper.IsExists(cr.Message))
            {
                return(CmResult.BuildFail("", "文件不存在1"));
            }


            return(BuildCmm($"{cr.Message}"));
        }
Esempio n. 17
0
        private CmResult BuildCmm(string cmd, int waitMils = 3000)
        {
            string strOutput = null;
            bool   success   = false;

            try
            {
                ProcessStartInfo psi = new ProcessStartInfo("sh");
                psi.UseShellExecute        = false;
                psi.RedirectStandardError  = true;
                psi.RedirectStandardInput  = true;
                psi.RedirectStandardOutput = true;
                psi.CreateNoWindow         = true;
                using (Process proCompiler = new Process())
                {
                    proCompiler.StartInfo = psi;
                    proCompiler.Start();
                    proCompiler.StandardInput.WriteLine(cmd);

                    proCompiler.StandardInput.Flush();
                    proCompiler.StandardInput.Dispose();

                    //  是否有错误信息
                    strOutput = proCompiler.StandardError.ReadToEnd();
                    if (string.IsNullOrEmpty(strOutput))
                    {
                        strOutput = proCompiler.StandardOutput.ReadToEnd();
                        success   = true;
                    }
                    proCompiler.WaitForExit(waitMils);
                }
                return(success ? CmResult.BuildSuccess(string.IsNullOrEmpty(strOutput) ? "执行成功" : strOutput) : CmResult.BuildFail("执行失败", strOutput));
            }
            catch (Exception ex)
            {
                return(CmResult.BuildFail("执行失败", ex.Message));
            }
        }