72 lines
1.8 KiB
JavaScript
72 lines
1.8 KiB
JavaScript
var express = require('express');
|
|
var app = express();
|
|
var router = express.Router();
|
|
var upload = require('./app/config/multer.config.js');
|
|
|
|
const {Docker} = require('node-docker-api');
|
|
|
|
const docker = new Docker({ socketPath: '/var/run/docker.sock' });
|
|
|
|
global.__basedir = __dirname;
|
|
|
|
app.use(express.static('resources'));
|
|
|
|
var http = require('http').createServer(app);
|
|
var io = require('socket.io')(http);
|
|
|
|
var docker_build = (socket, sessionID) => {
|
|
console.log('[server][start]', sessionID);
|
|
socket.emit('start')
|
|
|
|
docker.container.create({
|
|
Image: 'python:3.8',
|
|
name: sessionID,
|
|
Cmd: [ '/bin/bash', '-c', 'ls /output' ],
|
|
Volumes: {
|
|
"/output": `./uploads / {sessionID}`
|
|
},
|
|
})
|
|
.then(container => container.logs({
|
|
follow: true,
|
|
stdout: true,
|
|
stderr: true
|
|
}))
|
|
.then(stream => {
|
|
stream.on('data', info => console.log(info))
|
|
stream.on('error', err => console.log(err))
|
|
})
|
|
.catch(error => console.log(error));
|
|
};
|
|
|
|
var clients = 0;
|
|
|
|
io.on('connection', (socket) => {
|
|
const sessionID = socket.id;
|
|
console.log('[client][connection]', sessionID);
|
|
clients = clients + 1;
|
|
io.sockets.emit('users_count', clients);
|
|
|
|
socket.on('disconnect', () => {
|
|
clients = clients - 1;
|
|
console.log('[client][disconnect]', sessionID)
|
|
io.sockets.emit('users_count', clients);
|
|
});
|
|
|
|
socket.on('build', () => {
|
|
console.log('[client][build]', sessionID);
|
|
docker_build(socket, sessionID);
|
|
});
|
|
|
|
});
|
|
|
|
require('./app/routers/file.router.js')(app, router, upload);
|
|
|
|
// Create a Server
|
|
var server = http.listen(8081, () => {
|
|
|
|
var host = server.address().address
|
|
var port = server.address().port
|
|
|
|
console.log("App listening at http://%s:%s", host, port);
|
|
})
|