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); })