One-For-All-Server / index.js
hprasath's picture
Update index.js
93d296d verified
raw
history blame
4.25 kB
const express = require("express");
const app = express();
const bodyParser = require("body-parser");
const cors = require("cors");
const fs = require("fs");
const { exec } = require("child_process");
const compiler = require("compilex");
const options = { stats: true };
compiler.init(options);
app.use(express.json());
app.use(express.urlencoded({ extended: true }));
app.use(cors());
app.get("/", function (req, res) {
res.send("Hello World!!");
});
app.post("/compile", function (req, res) {
var code = req.body.code;
var input = req.body.input;
var lang = req.body.lang;
try {
if (lang == "Python") {
if (!input) {
var envData = { OS: "linux" };
compiler.compilePython(envData, code, function (data) {
if (data.output) {
res.send(data);
} else {
res.send({ error: data.error });
}
});
} else {
var envData = { OS: "linux" };
compiler.compilePythonWithInput(envData, code, input, function (data) {
if (data.output) {
res.send(data);
} else {
res.send({ error: data.error });
}
});
}
} else if (lang == "Java") {
fs.writeFile("/code/temp/Main.java", code, (err) => {
if (err) {
console.error(err);
res.status(500).send("Error writing Java file");
return;
}
const javaProcess = exec(
"javac -d /code/temp /code/temp/Main.java && java -cp /code/temp Main",
(error, stdout, stderr) => {
if (error) {
console.error(error);
res.send({ error: stderr });
return;
}
console.log(stdout);
console.error(stderr);
res.send({ output: stdout });
}
);
if (input) {
javaProcess.stdin.write(input);
javaProcess.stdin.end();
}
// Timeout functionality
const timeout = 5000; // 5 seconds timeout
let isTimeout = false;
const timeoutId = setTimeout(() => {
isTimeout = true;
javaProcess.kill(); // Kill the process if it exceeds the timeout
res.status(408).send({ error: "Time Limit Exceeded" });
}, timeout);
javaProcess.on("exit", () => {
clearTimeout(timeoutId); // Clear the timeout if the process exits before the timeout
if (!isTimeout) {
res.send({ output: stdout });
}
});
});
} else if (lang == "Cpp") {
fs.writeFile("/code/temp/Main.cpp", code, (err) => {
if (err) {
console.error(err);
res.status(500).send("Error writing C++ file");
return;
}
const cppProcess = exec(
"g++ -o /code/temp/Main /code/temp/Main.cpp && /code/temp/Main",
(error, stdout, stderr) => {
if (error) {
console.error(error);
res.send({ error: stderr });
return;
}
console.log(stdout);
console.error(stderr);
res.send({ output: stdout });
}
);
if (input) {
cppProcess.stdin.write(input);
cppProcess.stdin.end();
}
// Timeout functionality
const timeout = 5000; // 5 seconds timeout
let isTimeout = false;
const timeoutId = setTimeout(() => {
isTimeout = true;
cppProcess.kill(); // Kill the process if it exceeds the timeout
res.status(408).send({ error: "Time Limit Exceeded" });
}, timeout);
cppProcess.on("exit", () => {
clearTimeout(timeoutId); // Clear the timeout if the process exits before the timeout
if (!isTimeout) {
res.send({ output: stdout });
}
});
});
}
} catch (e) {
console.log("error:" + e);
}
});
const port = 7860;
app.listen(port, () => {
console.log(`Open http://localhost:${port}`);
});