Send commits missed during the reconnect

This commit is contained in:
anugu-chegg 2018-02-14 13:18:44 +05:30 committed by muxator
parent bf05e9ae89
commit d41e184a3c
2 changed files with 36 additions and 9 deletions

View File

@ -1177,33 +1177,51 @@ function handleClientReady(client, message)
{ {
changesetsNeeded.push(r); changesetsNeeded.push(r);
} }
//get all changesets callback();
async.forEach(changesetsNeeded, function(revNum) },
//get all changesets
function(callback)
{
async.eachSeries(changesetsNeeded, function(revNum, callback)
{ {
pad.getRevisionChangeset(revNum, function(err, value) pad.getRevisionChangeset(revNum, function(err, value)
{ {
if(ERR(err)) return; if(ERR(err)) return;
changesets[revNum] = value; changesets[revNum] = value;
callback();
}); });
}, callback);
},
function(callback)
{
async.eachSeries(changesetsNeeded, function(revNum, callback)
{
pad.getRevisionAuthor(revNum, function(err, value) pad.getRevisionAuthor(revNum, function(err, value)
{ {
if(ERR(err)) return; if(ERR(err)) return;
changesetsAuthor[revNum] = value; changesetsAuthor[revNum] = value;
callback();
}); });
}, callback);
},
function(callback)
{
async.eachSeries(changesetsNeeded, function(revNum, callback)
{
pad.getRevisionDate(revNum, function(err, value) pad.getRevisionDate(revNum, function(err, value)
{ {
if(ERR(err)) return; if(ERR(err)) return;
changesetsTimestamp[revNum] = value; changesetsTimestamp[revNum] = value;
callback();
}); });
}); }, callback);
callback(null);
} }
], ],
//return err and changeset //return err and changeset
function(err) function(err)
{ {
if(ERR(err, callback)) return; 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 forWire = Changeset.prepareForWire(changesets[r], pad.pool);
var wireMsg = {"type":"COLLABROOM", var wireMsg = {"type":"COLLABROOM",
@ -1216,7 +1234,8 @@ function handleClientReady(client, message)
currentTime: changesetsTimestamp[r] currentTime: changesetsTimestamp[r]
}}; }};
client.json.send(wireMsg); client.json.send(wireMsg);
}); callback();
});
if (startNum == endNum) if (startNum == endNum)
{ {
var Msg = {"type":"COLLABROOM", var Msg = {"type":"COLLABROOM",

View File

@ -342,6 +342,7 @@ function getCollabClient(ace2editor, serverVars, initialUserInfo, options, _pad)
} }
else if (msg.type == 'CLIENT_RECONNECT') else if (msg.type == 'CLIENT_RECONNECT')
{ {
// When client has reconnected but there are no pending changes from other clients
if (msg.noChanges) if (msg.noChanges)
{ {
socketIOError = false; socketIOError = false;
@ -354,19 +355,26 @@ function getCollabClient(ace2editor, serverVars, initialUserInfo, options, _pad)
var author = (msg.author || ''); var author = (msg.author || '');
var apool = msg.apool; var apool = msg.apool;
if (rev + 1 == currRev) if (rev + 1 == currRev)
{ {
if (author == pad.getUserId()) if (author == pad.getUserId())
{ {
editor.applyPreparedChangesetToBase(); editor.applyPreparedChangesetToBase();
setStateIdle(); setStateIdle();
callCatchingErrors("onInternalAction", function()
{
callbacks.onInternalAction("commitAcceptedByServer");
});
callCatchingErrors("onConnectionTrouble", function()
{
callbacks.onConnectionTrouble("OK");
});
handleUserChanges();
} }
else else
{ {
editor.applyChangesToBase(changeset, author, apool); editor.applyChangesToBase(changeset, author, apool);
} }
} }
if (rev + 1 < currRev) if (rev + 1 < currRev)
{ {
@ -374,8 +382,8 @@ function getCollabClient(ace2editor, serverVars, initialUserInfo, options, _pad)
} }
if (currRev == newRev) if (currRev == newRev)
{ {
socketIOError = false;
rev = newRev; rev = newRev;
socketIOError = false;
} }
} }
else if (msg.type == "NO_COMMIT_PENDING") else if (msg.type == "NO_COMMIT_PENDING")