Fix server reconnect might not resend pending operations

This commit is contained in:
Wu Cheng-Han 2016-11-03 14:04:53 +08:00
parent e427709042
commit 734d475c0e

View file

@ -2648,7 +2648,8 @@ socket.on('doc', function (obj) {
obj = JSON.parse(obj); obj = JSON.parse(obj);
var body = obj.str; var body = obj.str;
var bodyMismatch = editor.getValue() !== body; var bodyMismatch = editor.getValue() !== body;
var setDoc = !cmClient || (cmClient && (cmClient.revision === -1 || (cmClient.revision !== obj.revision && Object.keys(cmClient.state).length <= 0))) || obj.force; var havePendingOperation = cmClient && Object.keys(cmClient.state).length > 0;
var setDoc = !cmClient || (cmClient && (cmClient.revision === -1 || (cmClient.revision !== obj.revision && !havePendingOperation))) || obj.force;
saveInfo(); saveInfo();
if (setDoc && bodyMismatch) { if (setDoc && bodyMismatch) {
@ -2682,6 +2683,8 @@ socket.on('doc', function (obj) {
cmClient.setState(new ot.Client.Synchronized()); cmClient.setState(new ot.Client.Synchronized());
cmClient.initializeClientList(); cmClient.initializeClientList();
cmClient.initializeClients(obj.clients); cmClient.initializeClients(obj.clients);
} else if (havePendingOperation) {
cmClient.serverReconnect();
} }
if (setDoc && bodyMismatch) { if (setDoc && bodyMismatch) {