diff --git a/lib/helperLib.js b/lib/helperLib.js index 0148d74..3b74f95 100644 --- a/lib/helperLib.js +++ b/lib/helperLib.js @@ -17,6 +17,8 @@ var getAndSendRevHistory = require("./revAlgorithm.js").getAndSendRevHistory; var MessageQueue =require("./MessageQueue.js"); console.log("MessageQueue", MessageQueue); +var CURRENT_TIMESTAMP = Date.now(); + module.exports = { validateParArr: function(parId, parArr){ @@ -121,21 +123,31 @@ function attachLogInListeners(socket){ // }); + var syncValidation = function(data, timestampData, queueData, emitData){ + if(timestampData[1] != CURRENT_TIMESTAMP){ + socket.emit("OFF_SYNC"); + } + else{ + CURRENT_TIMESTAMP = timestampData[0]; + socket.broadcast.emit(emitData[0], emitData[1]); + MessageQueue.queueOrDo(action); + } + } //maybe emit sooner... //need to broadcast parentArray. - socket.on("newNode", function(data){ - MessageQueue.queueOrDo(['newNode', data, socket]) + //timestampData=[CURRENT_TIMESTAMP, oldTime] + socket.on("newNode", function(data, timestampData){ + syncValidation(data, timestampData, ['newNode', data, socket], ["dummy", 1234]); + //(todo = set IDs on client (instead of negative Ids)); }); - socket.on("removeNode", function(data){ - socket.broadcast.emit("removeNode", data); - MessageQueue.queueOrDo(['removeNode', data, socket]) + socket.on("removeNode", function(data, timestampData){ + syncValidation(data, timestampData, ['removeNode', data, socket], ["removeNode", data]); }); - socket.on("movedNode", function(data){ - socket.broadcast.emit("movedNode", [data[0], data[2]]); - MessageQueue.queueOrDo(['movedNode', data, socket]) + socket.on("movedNode", function(data, timestampData){ + syncValidation(data, timestampData, ['movedNode', data, socket],[ "movedNode", [data[0],data[2]] ]); }); } diff --git a/models/Node.js b/models/Node.js index 65fc50b..06f9aaa 100644 --- a/models/Node.js +++ b/models/Node.js @@ -40,12 +40,12 @@ module.exports.addNode = addNode; // return rootID; // } -function findAndSocketSend(socket){ +function findAndSocketSend(socket, CURRENT_TIMESTAMP){ var nodes = {'keeping': 'calm'} MyNode.find().populate('authorId','_id google.name' ).exec(function(err, nodes){ if(!err){ // require("underscore").each(nodes, function(node){console.log(node)}); - socket.emit('nodeData', nodes) + socket.emit('nodeData', nodes, CURRENT_TIMESTAMP) return {'hell': 'yes'} }else{ socket.emit('nodeData', "error!!!") diff --git a/public/js/backbone/router.js b/public/js/backbone/router.js index 1780e5c..2c7f8a4 100644 --- a/public/js/backbone/router.js +++ b/public/js/backbone/router.js @@ -1,4 +1,4 @@ - +var CURRENT_TIMESTAMP; var socket = null; var AppRouter = Backbone.Router.extend({ @@ -99,14 +99,19 @@ var that = this; socket.emitWrapper = function(eventName, data){ console.log(this); - if(this.socket.connected){ this.emit(eventName, data); } + if(this.socket.connected){ + var oldTime = CURRENT_TIMESTAMP; + CURRENT_TIMESTAMP = Date.now(); + this.emit(eventName, data, [CURRENT_TIMESTAMP, oldTime]); + } else{ //(alert + lock) alert("Internet connection down. Edits not synced. Refresh when back online."); } } -socket.on('nodeData', function(data){ +socket.on('nodeData', function(data, SERVER_TIMESTAMP){ //alert("data"); + CURRENT_TIMESTAMP = SERVER_TIMESTAMP; console.log(data); nodesCollection = new NodesCollection(data); var id = nodesCollection.findWhere({text: "0root"}).get("_id"); @@ -267,15 +272,20 @@ socket.on("revControl", function(data){ //To be continued... }); -socket.on("VALIDATE", function(data){ - var parId = data[0]; - var parArr = data[1]; - var thisParArr = nodesCollection.findWhere({_id: parId}).get("children"); - if(!_.isEqual(thisParArr, parArr)){ - alert("syncing error.Edits no longer synced. Please refresh browser"); - socket = null; - } -}); +socket.on("OFF_SYNC", function(){ + alert("syncing error.Edits no longer synced. Please refresh browser"); + socket = null; +}); + +// socket.on("VALIDATE", function(data){ +// var parId = data[0]; +// var parArr = data[1]; +// var thisParArr = nodesCollection.findWhere({_id: parId}).get("children"); +// if(!_.isEqual(thisParArr, parArr)){ +// alert("syncing error.Edits no longer synced. Please refresh browser"); +// socket = null; +// } +// }); socket.emit("nodeRequest");