Better reconnect after invalid lastKnownHash
This commit is contained in:
@@ -49,24 +49,29 @@ define([
|
||||
config = undefined;
|
||||
|
||||
var evPatchSent = Util.mkEvent();
|
||||
var chainpad;
|
||||
|
||||
var chainpad = ChainPad.create({
|
||||
userName: userName,
|
||||
initialState: initialState,
|
||||
patchTransformer: patchTransformer,
|
||||
validateContent: validateContent,
|
||||
avgSyncMilliseconds: avgSyncMilliseconds,
|
||||
logLevel: logLevel
|
||||
});
|
||||
chainpad.onMessage(function(message, cb) {
|
||||
sframeChan.query('Q_RT_MESSAGE', message, function (err) {
|
||||
if (!err) { evPatchSent.fire(); }
|
||||
cb(err);
|
||||
var makeChainPad = function () {
|
||||
var _chainpad = ChainPad.create({
|
||||
userName: userName,
|
||||
initialState: initialState,
|
||||
patchTransformer: patchTransformer,
|
||||
validateContent: validateContent,
|
||||
avgSyncMilliseconds: avgSyncMilliseconds,
|
||||
logLevel: logLevel
|
||||
});
|
||||
});
|
||||
chainpad.onPatch(function () {
|
||||
onRemote({ realtime: chainpad });
|
||||
});
|
||||
_chainpad.onMessage(function(message, cb) {
|
||||
sframeChan.query('Q_RT_MESSAGE', message, function (err) {
|
||||
if (!err) { evPatchSent.fire(); }
|
||||
cb(err);
|
||||
});
|
||||
});
|
||||
_chainpad.onPatch(function () {
|
||||
onRemote({ realtime: chainpad });
|
||||
});
|
||||
return _chainpad;
|
||||
};
|
||||
chainpad = makeChainPad();
|
||||
|
||||
var myID;
|
||||
var isReady = false;
|
||||
@@ -96,6 +101,11 @@ define([
|
||||
sframeChan.on('EV_RT_ERROR', function (err) {
|
||||
isReady = false;
|
||||
chainpad.abort();
|
||||
if (err.type === 'EUNKNOWN') { // XXX
|
||||
// Recoverable error: make a new chainpad
|
||||
chainpad = makeChainPad();
|
||||
return;
|
||||
}
|
||||
onError(err);
|
||||
});
|
||||
sframeChan.on('EV_RT_CONNECT', function (content) {
|
||||
@@ -149,15 +159,18 @@ define([
|
||||
});
|
||||
};
|
||||
|
||||
return Object.freeze({
|
||||
var cpNfInner = {
|
||||
getMyID: function () { return myID; },
|
||||
metadataMgr: metadataMgr,
|
||||
whenRealtimeSyncs: whenRealtimeSyncs,
|
||||
onInfiniteSpinner: evInfiniteSpinner.reg,
|
||||
onPatchSent: evPatchSent.reg,
|
||||
offPatchSent: evPatchSent.unreg,
|
||||
chainpad: chainpad,
|
||||
};
|
||||
cpNfInner.__defineGetter__("chainpad", function () {
|
||||
return chainpad;
|
||||
});
|
||||
return Object.freeze(cpNfInner);
|
||||
};
|
||||
return Object.freeze(module.exports);
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user