summaryrefslogtreecommitdiff
path: root/lib/realtime.js
diff options
context:
space:
mode:
authorCheng-Han, Wu2016-06-17 16:09:33 +0800
committerCheng-Han, Wu2016-06-17 16:09:33 +0800
commitdbc126b156f301c18d3963cd269dcd1eac040873 (patch)
tree0032b539ed308d3972e209fd3752011e0ac673ef /lib/realtime.js
parent56b4739e6d2f455f7b9a40f8c54b3f543bef1790 (diff)
Add support of saving note revision and improve app start and stop procedure to ensure data integrity
Diffstat (limited to 'lib/realtime.js')
-rw-r--r--lib/realtime.js28
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;