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 `
${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