File size: 3,163 Bytes
a55949b
 
314a3e4
a55949b
314a3e4
 
a55949b
 
 
 
 
 
 
 
 
336b464
a55949b
 
967b852
6eb59c6
84c00ca
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6eb59c6
41a4668
 
 
 
 
 
 
 
967b852
41a4668
 
 
63a053c
41a4668
 
 
6eb59c6
41a4668
 
 
 
 
 
 
6eb59c6
 
f311e4e
 
 
 
 
 
 
 
5502f95
f311e4e
 
 
5502f95
f311e4e
 
 
 
 
 
 
 
 
 
 
 
84c00ca
 
314a3e4
6eb59c6
e7e6e29
314a3e4
 
 
6eb59c6
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
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!!");
});

const TIMEOUT_VALUE = 10000;

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",
            { timeout: TIMEOUT_VALUE }, // Add timeout option
            (error, stdout, stderr) => {
              if (error) {
                console.error(error);
                res.send({error: "Time Limit Exceeded!!"});
                return;
              }
              console.error(stderr);
              res.send({output:stdout});
            }
          );
          if (input) {
            javaProcess.stdin.write(input);
            javaProcess.stdin.end();
          }
        });
      }
      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",
            { timeout: TIMEOUT_VALUE }, // Add timeout option
            (error, stdout, stderr) => {
              if (error) {
                console.error(error);
                res.send({ error: "Compilation or execution timed out" });
                return;
              }
              console.error(stderr);
              res.send({ output: stdout });
            }
          );
          if (input) {
            cppProcess.stdin.write(input);
            cppProcess.stdin.end();
          }
        });
      }
    } catch (e) {
      console.log("error:" + e);
    }
  });

const port = 7860;
app.listen(port, () => {
  console.log(`Open http://localhost:${port}`);
});