com2014-server/server.js

79 lines
2.3 KiB
JavaScript

const fs = require('fs');
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')
path = process.cwd()
fs.mkdir(path + '/output/' + sessionID.toString(), () => {
socket.emit('update', 'Output directort created.')
})
docker.container.create({
Image: 'python:3.8',
Cmd: [ '/bin/bash', '-c', 'cd /tsp && pip install -r requirements.txt && python main.py data/simple/ulysses16.tsp && cp output/* /output' ],
HostConfig: {
Binds: [
path.toString() + '/com2014-template:/tsp',
path.toString() + "/output/" + sessionID.toString() + "/output"
]
}
})
.then(container => container.start())
.then(container => container.logs({
follow: true,
stdout: true,
stderr: true
}))
.then(stream => {
stream.on('data', info => socket.emit('update', new Buffer.from(info).toString('ascii')))
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);
})