From d41e184a3ccf4043e4221dba1e8b8f508b17a851 Mon Sep 17 00:00:00 2001 From: anugu-chegg Date: Wed, 14 Feb 2018 13:18:44 +0530 Subject: [PATCH] Send commits missed during the reconnect --- src/node/handler/PadMessageHandler.js | 31 +++++++++++++++++++++------ src/static/js/collab_client.js | 14 +++++++++--- 2 files changed, 36 insertions(+), 9 deletions(-) diff --git a/src/node/handler/PadMessageHandler.js b/src/node/handler/PadMessageHandler.js index 1d9b5cf1..5e39bdb5 100644 --- a/src/node/handler/PadMessageHandler.js +++ b/src/node/handler/PadMessageHandler.js @@ -1177,33 +1177,51 @@ function handleClientReady(client, message) { changesetsNeeded.push(r); } - //get all changesets - async.forEach(changesetsNeeded, function(revNum) + callback(); + }, + //get all changesets + function(callback) + { + async.eachSeries(changesetsNeeded, function(revNum, callback) { pad.getRevisionChangeset(revNum, function(err, value) { if(ERR(err)) return; changesets[revNum] = value; + callback(); }); + }, callback); + }, + function(callback) + { + async.eachSeries(changesetsNeeded, function(revNum, callback) + { pad.getRevisionAuthor(revNum, function(err, value) { if(ERR(err)) return; changesetsAuthor[revNum] = value; + callback(); }); + }, callback); + }, + function(callback) + { + async.eachSeries(changesetsNeeded, function(revNum, callback) + { pad.getRevisionDate(revNum, function(err, value) { if(ERR(err)) return; changesetsTimestamp[revNum] = value; + callback(); }); - }); - callback(null); + }, callback); } ], //return err and changeset function(err) { if(ERR(err, callback)) return; - async.eachSeries(changesetsNeeded, function(r) + async.eachSeries(changesetsNeeded, function(r, callback) { var forWire = Changeset.prepareForWire(changesets[r], pad.pool); var wireMsg = {"type":"COLLABROOM", @@ -1216,7 +1234,8 @@ function handleClientReady(client, message) currentTime: changesetsTimestamp[r] }}; client.json.send(wireMsg); - }); + callback(); + }); if (startNum == endNum) { var Msg = {"type":"COLLABROOM", diff --git a/src/static/js/collab_client.js b/src/static/js/collab_client.js index 5259efd6..825803f1 100644 --- a/src/static/js/collab_client.js +++ b/src/static/js/collab_client.js @@ -342,6 +342,7 @@ function getCollabClient(ace2editor, serverVars, initialUserInfo, options, _pad) } else if (msg.type == 'CLIENT_RECONNECT') { + // When client has reconnected but there are no pending changes from other clients if (msg.noChanges) { socketIOError = false; @@ -354,19 +355,26 @@ function getCollabClient(ace2editor, serverVars, initialUserInfo, options, _pad) var author = (msg.author || ''); var apool = msg.apool; - if (rev + 1 == currRev) { if (author == pad.getUserId()) { editor.applyPreparedChangesetToBase(); setStateIdle(); + callCatchingErrors("onInternalAction", function() + { + callbacks.onInternalAction("commitAcceptedByServer"); + }); + callCatchingErrors("onConnectionTrouble", function() + { + callbacks.onConnectionTrouble("OK"); + }); + handleUserChanges(); } else { editor.applyChangesToBase(changeset, author, apool); } - } if (rev + 1 < currRev) { @@ -374,8 +382,8 @@ function getCollabClient(ace2editor, serverVars, initialUserInfo, options, _pad) } if (currRev == newRev) { - socketIOError = false; rev = newRev; + socketIOError = false; } } else if (msg.type == "NO_COMMIT_PENDING")