diff options
Diffstat (limited to '')
-rw-r--r-- | lib/realtime.js | 28 |
1 files changed, 23 insertions, 5 deletions
diff --git a/lib/realtime.js b/lib/realtime.js index 1d142709..0edf647c 100644 --- a/lib/realtime.js +++ b/lib/realtime.js @@ -26,8 +26,7 @@ var realtime = { secure: secure, connection: connection, getStatus: getStatus, - users: users, - notes: notes + isReady: isReady }; function onAuthorizeSuccess(data, accept) { @@ -72,9 +71,8 @@ function emitCheck(note) { } //actions -var users, notes; -realtime.users = users = {}; -realtime.notes = notes = {}; +var users = {}; +var notes = {}; //update when the note is dirty var updater = setInterval(function () { async.each(Object.keys(notes), function (key, callback) { @@ -152,6 +150,7 @@ function finishUpdateNote(note, _note, callback) { lastchangeAt: Date.now() }; _note.update(values).then(function (_note) { + saverSleep = false; return callback(null, _note); }).catch(function (err) { logger.error(err); @@ -179,6 +178,18 @@ var cleaner = setInterval(function () { if (err) return logger.error('cleaner error', err); }); }, 60000); +var saverSleep = true; +// save note revision in interval +var saver = setInterval(function () { + if (saverSleep) return; + models.Revision.saveAllNotesRevision(function (err, notes) { + if (err) return logger.error('revision saver failed: ' + err); + if (notes.length <= 0) { + saverSleep = true; + return; + } + }); +}, 60000 * 5); function getStatus(callback) { models.Note.count().then(function (notecount) { @@ -233,6 +244,13 @@ function getStatus(callback) { }); } +function isReady() { + return realtime.io + && Object.keys(notes).length == 0 && Object.keys(users).length == 0 + && connectionSocketQueue.length == 0 && !isConnectionBusy + && disconnectSocketQueue.length == 0 && !isDisconnectBusy; +} + function extractNoteIdFromSocket(socket) { if (!socket || !socket.handshake || !socket.handshake.headers) { return false; |