diff --git a/config/demo.js b/config/demo.js index 21c9ccd..ee3ada3 100644 --- a/config/demo.js +++ b/config/demo.js @@ -6,31 +6,44 @@ const path = require('path') const debug = require('debug')('tracman-demo') module.exports = (io) => { - // File is space-seperated: delay, lat, lon, dir, spd - fs.readFile(path.join(__dirname, '/demo.txt'), (err, data) => { - if (err) console.error(err.stack) + return new Promise( (resolve, reject) => { - const lines = data.toString().split('\n'); - - (function sendLoc (ln) { - if (ln > 20754) { - sendLoc(0) + // File is space-seperated: delay, lat, lon, dir, spd + fs.readFile(path.join(__dirname, '/demo.txt'), (err, data) => { + if (err) { + console.error(err.message) + reject() } else { - let loc = lines[ln].split(' ') - debug(`Sending demo location: ${loc[1]}, ${loc[2]}`) - io.to('demo').emit('get', { - tim: new Date(), - lat: loc[1], - lon: loc[2], - dir: loc[3], - spd: loc[4] - }) - // Repeat after delay in milliseconds - setTimeout(() => { - sendLoc(ln + 1) // next line of file - }, loc[0]) + const lines = data.toString().split('\n'); + + (function sendLoc (ln) { + if (ln > 20754) { + sendLoc(0) + } else { + let loc = lines[ln].split(' ') + debug(`Sending demo location: ${loc[1]}, ${loc[2]}`) + io.to('demo').emit('get', { + tim: new Date(), + lat: loc[1], + lon: loc[2], + dir: loc[3], + spd: loc[4] + }) + + // Repeat after delay in milliseconds + setTimeout(() => { + sendLoc(ln + 1) // next line of file + }, loc[0]) + } + })(5667) + + console.log(' Demo running') + resolve() + } - })(5667) + + }) + }) } diff --git a/config/mail.js b/config/mail.js index 7912524..d0574f2 100644 --- a/config/mail.js +++ b/config/mail.js @@ -15,29 +15,37 @@ let transporter = nodemailer.createTransport({ }) module.exports = { - + verify: () => { debug(`Verifying SMTP connection...`) - transporter.verify( (err,success) => { - if (err){ console.error(err.stack); } - console.log(`SMTP${(success)?'':' not'} ready`) - } ) + + return new Promise( (resolve, reject) => { + transporter.verify() + .then( (success) => { + console.log(` SMTP${(success)?'':' not'} ready`) + resolve() + }).catch( (err) => { + console.log(err.stack) + reject() + }) + }) + }, - + send: transporter.sendMail.bind(transporter), - + text: (text) => { return `Tracman\n\n${text}\n\nDo not reply to this email\nFor information about why you received this email, see the privacy policy at ${env.url}/privacyy#email` }, - + html: (text)=>{ return `

+Tracman

${text}

Do not reply to this email. For information about why you recieved this email, see our privacy policy.

` }, - + noReply: '"Tracman" ', - + to: (user) => { return `"${user.name}" <${user.email}>` } - + } diff --git a/server.js b/server.js index df5c25d..01d55b9 100755 --- a/server.js +++ b/server.js @@ -20,19 +20,30 @@ const http = require('http').Server(app) const io = require('socket.io')(http) const sockets = require('./config/sockets.js') +// Promises marking a ready server +let ready_promise_list = [] + /* Database */ { // Setup with native ES6 promises mongoose.Promise = global.Promise // Connect to database - mongoose.connect(env.mongoSetup, { - useMongoClient: true, - socketTimeoutMS: 30000, - //reconnectTries: 30, - keepAlive: true - }) - .then( (db) => { console.log(`Mongoose connected to mongoDB ${db.name}`); } ) - .catch( (err) => { console.error(err.stack); } ) + ready_promise_list.push( new Promise( (resolve, reject) => { + mongoose.connect(env.mongoSetup, { + useMongoClient: true, + socketTimeoutMS: 30000, + //reconnectTries: 30, + keepAlive: true + }) + .then( (db) => { + console.log(` Mongoose connected to ${db.name} database`) + resolve() + } ) + .catch( (err) => { + console.error(err.stack) + reject() + } ) + }) ) } @@ -159,26 +170,46 @@ const sockets = require('./config/sockets.js') } /* RUNTIME */ -console.log('Starting Tracman server...') +console.log(`Starting Tracman server in ${env.mode} mode...`) // Test SMTP server -mail.verify() +ready_promise_list.push(mail.verify()) // Listen -http.listen(env.port, () => { - console.log(`Listening in ${env.mode} mode on port ${env.port}... `) +ready_promise_list.push( new Promise( (resolve, reject) => { + http.listen(env.port, () => { - // Check for clients for each user - User.find({}) - .then((users) => { - users.forEach((user) => { - sockets.checkForUsers(io, user.id) + console.log(` Listening on port ${env.port}`) + resolve() + + // Check for clients for each user + ready_promise_list.push( new Promise( (resolve, reject) => { + User.find({}) + .then((users) => { + users.forEach((user) => { + sockets.checkForUsers(io, user.id) + }) + resolve() + }) + .catch( (err) => { + console.error(err.stack) + reject() + }) + }) ) + + // Start transmitting demo + ready_promise_list.push( demo(io) ) + + // Mark everything when working correctly + Promise.all(ready_promise_list).then( () => { + console.log('Tracman server is running properly\n') + app.emit('ready') // Used for tests + }).catch( (err) => { + if (err) console.error(err.message) + console.log(`Tracman server is not running properly!\n`) }) - }) - .catch((err) => { console.error(err.stack) }) - // Start transmitting demo - demo(io) -}) + }) +}) ) module.exports = app