60 lines
1.8 KiB
JavaScript
60 lines
1.8 KiB
JavaScript
/**
|
|
* Socket.io handler
|
|
*/
|
|
|
|
var fs = require('fs');
|
|
|
|
var waitingQueueSocket = function(socket, testQueue) {
|
|
|
|
socket.on('waiting', function(testId) {
|
|
console.log('User waiting for test id ' + testId);
|
|
|
|
sendTestStatus(testId);
|
|
|
|
testQueue.on('testComplete', function(id) {
|
|
if (testId === id) {
|
|
socket.emit('complete');
|
|
console.log('Sending complete event to test id ' + testId);
|
|
}
|
|
});
|
|
|
|
testQueue.on('testFailed', function(id) {
|
|
if (testId === id) {
|
|
socket.emit('failed');
|
|
console.log('Sending failed event to test id ' + testId);
|
|
}
|
|
});
|
|
|
|
testQueue.on('queueMoving', function() {
|
|
var positionInQueue = testQueue.indexOf(testId);
|
|
if (positionInQueue >= 0) {
|
|
socket.emit('position', positionInQueue);
|
|
console.log('Sending position to test id ' + testId);
|
|
}
|
|
});
|
|
});
|
|
|
|
// Finds the status of a test and send it to the client
|
|
function sendTestStatus(testId) {
|
|
// Check task position in queue
|
|
var positionInQueue = testQueue.indexOf(testId);
|
|
|
|
if (positionInQueue >= 0) {
|
|
socket.emit('position', positionInQueue);
|
|
} else {
|
|
// Find in results files
|
|
var exists = fs.exists('results/' + testId + '/results.json', function(exists) {
|
|
if (exists) {
|
|
// TODO : find a way to make sure the file is completely written
|
|
setTimeout(function() {
|
|
socket.emit('complete');
|
|
}, 4000);
|
|
} else {
|
|
socket.emit('404');
|
|
}
|
|
});
|
|
}
|
|
}
|
|
};
|
|
|
|
module.exports = waitingQueueSocket; |