com2014-server/app/routers/file.router.js

188 lines
4.7 KiB
JavaScript

module.exports = (app, router, upload) => {
const fileWorker = require('../controllers/file.controller.js')
var path = __basedir + '/views/'
const tsp_list = ["ulysses16", "att48", "st70", "a280", "pcb442", "dsj1000"]
router.use((req,res,next) => {
console.log("/" + req.method)
next()
});
app.get('/', (req,res) => {
res.sendFile(path + "index.html")
});
app.get('/leaderboard', (req, res) => {
leaderboard = global.leaderboard
if(req.query.type === 'txt') {
res.set({"Content-Disposition":"attachment; filename=\"" + tsp_list[req.query.tsp] + ".txt\""})
result = "Not Found"
switch (parseInt(req.query.tsp)) {
case 0:
leaderboard.ulysses16.forEach(e => {
console.log('leader', e.id)
if(e.id == req.query.id) {
sentFlag = true
result = `${e.fitness}\n${e.solution}`
}
})
res.end(result)
break;
case 1:
leaderboard.att48.forEach(e => {
if(e.id == req.query.id) {
result = `${e.fitness}\n${e.solution}`
}
})
res.end(result)
break;
case 2:
leaderboard.st70.forEach(e => {
if(e.id == req.query.id) {
result = `${e.fitness}\n${e.solution}`
}
})
res.end(result)
break;
case 3:
leaderboard.a280.forEach(e => {
if(e.id == req.query.id) {
result = `${e.fitness}\n${e.solution}`
}
})
res.end(result)
break;
case 4:
leaderboard.pcb442.forEach(e => {
if(e.id == req.query.id) {
result = `${e.fitness}\n${e.solution}`
}
})
res.end(result)
break;
case 5:
leaderboard.dsj1000.forEach(e => {
if(e.id == req.query.id) {
result = `${e.fitness}\n${e.solution}`
}
})
res.end(result)
break
default:
res.sendStatus(404)
break
}
}
else if (req.query.type === 'json') {
res.set({"Content-Disposition":"attachment; filename=\"" + tsp_list[req.query.tsp] + ".json\""})
// res.header("Content-Type",'application/json')
data = {}
switch (parseInt(req.query.tsp)) {
case 0:
data = require('../../data/ulysses16.json')
data['edges'] = []
leaderboard.ulysses16.forEach(e => {
if(e.id == req.query.id) {
for (let i = 0; i < e.solution.length; i++) {
data['edges'].push({
'source': e.solution[i % e.solution.length],
'target': e.solution[(i+1) % e.solution.length]
})
}
}
})
break;
case 1:
data = require('../../data/att48.json')
data['edges'] = []
leaderboard.att48.forEach(e => {
if(e.id == req.query.id) {
for (let i = 0; i < e.solution.length; i++) {
data['edges'].push({
'source': e.solution[i % e.solution.length],
'target': e.solution[(i+1) % e.solution.length]
})
}
}
})
break;
case 2:
data = require('../../data/st70.json')
data['edges'] = []
leaderboard.st70.forEach(e => {
if(e.id == req.query.id) {
for (let i = 0; i < e.solution.length; i++) {
data['edges'].push({
'source': e.solution[i % e.solution.length],
'target': e.solution[(i+1) % e.solution.length]
})
}
}
})
break;
case 3:
data = require('../../data/a280.json')
data['edges'] = []
leaderboard.a280.forEach(e => {
if(e.id == req.query.id) {
for (let i = 0; i < e.solution.length; i++) {
data['edges'].push({
'source': e.solution[i % e.solution.length],
'target': e.solution[(i+1) % e.solution.length]
})
}
}
})
break;
case 4:
data = require('../../data/pcb442.json')
data['edges'] = []
leaderboard.pcb442.forEach(e => {
if(e.id == req.query.id) {
for (let i = 0; i < e.solution.length; i++) {
data['edges'].push({
'source': e.solution[i % e.solution.length],
'target': e.solution[(i+1) % e.solution.length]
})
}
}
})
break;
case 5:
data = require('../../data/dsj1000.json')
data['edges'] = []
leaderboard.dsj1000.forEach(e => {
if(e.id == req.query.id) {
for (let i = 0; i < e.solution.length; i++) {
data['edges'].push({
'source': e.solution[i % e.solution.length],
'target': e.solution[(i+1) % e.solution.length]
})
}
}
})
break;
default:
break;
}
res.end(JSON.stringify(data))
}
else {
res.sendStatus(404)
}
});
app.post('/api/files/upload', upload.single("uploadfile"), fileWorker.uploadFile)
app.get('/api/files/getall', fileWorker.listAllFiles)
app.get('/api/files/result', fileWorker.downloadFile)
app.use('/',router)
app.use('*', (req,res) => {
res.sendFile(path + "404.html")
})
}