File size: 3,445 Bytes
a55949b
 
314a3e4
a55949b
314a3e4
 
a55949b
 
 
 
 
 
 
 
 
336b464
a55949b
 
00320d3
6eb59c6
84c00ca
 
 
 
 
 
 
 
 
00320d3
84c00ca
 
 
00320d3
84c00ca
 
 
 
00320d3
84c00ca
 
 
00320d3
84c00ca
 
 
ce4da38
218a33b
ce4da38
218a33b
ce4da38
218a33b
 
 
 
 
 
 
 
 
 
 
 
 
 
2481e05
218a33b
 
8bda14e
 
 
 
218a33b
 
 
 
 
f311e4e
218a33b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
f311e4e
218a33b
 
 
 
f311e4e
218a33b
 
 
 
314a3e4
6eb59c6
218a33b
 
e7e6e29
314a3e4
 
 
ce4da38
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
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
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"){
        compileJava(code, input, res);
      } else if (lang == "Cpp") {
        compileCpp(code, input, res);
      }
    } catch (e) {
      console.log("error:" + e);
    }
  });

const compileJava = (code, input, res) => {
  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 },
      (error, stdout, stderr) => {
        if (error) {
          if (error.code === 1) {
            console.error(stderr);
            res.send({ error: stderr });
          } else if (error.killed) {
            console.error("Time Limit Exceeded!!");
            res.send({ error: "Time Limit Exceeded!!" });
          } else {
            console.error(stderr);
            res.send({ error: stderr });
          }
          return;
        }
        console.log(stdout);
        res.send({ output: stdout });
      }
    );
    if (input) {
      javaProcess.stdin.write(input);
      javaProcess.stdin.end();
    }
  });
};

const compileCpp = (code, input, res) => {
  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) {
          if (error.killed) {
            console.error("Time Limit Exceeded!!");
            res.send({ error: "Time Limit Exceeded!!" });
          } else {
            console.error(stderr);
            res.send({ error: stderr });
          }
          return;
        }
        console.log(stdout);
        res.send({ output: stdout });
      }
    );
    if (input) {
      cppProcess.stdin.write(input);
      cppProcess.stdin.end();
    }
  });
};


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