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}")); }
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)); }
// 无需编译 public CmResult Python(string path) { if (!FileHelper.IsExists(path)) { return(CmResult.BuildFail("", "文件不存在")); } if (!path.EndsWith(".py")) { return(CmResult.BuildFail("", "文件类型不正确")); } return(BuildHelper.BuildCmm($"python {path}")); }
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)); }
// 无需编译 public CmResult Nodejs(string path) { if (!FileHelper.IsExists(path)) { return(CmResult.BuildFail("", "文件不存在")); } if (!path.EndsWith(".js")) { return(CmResult.BuildFail("", "文件类型不正确")); } return(BuildHelper.BuildCmm($"node {path}")); }
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}")); }
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)); } }
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)); }
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); }
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); })); }
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}")); }
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)); }
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)); } }
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)); }
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)); }
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}")); }
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)); } }