Commit 8f3ecd7d authored by Alexander.Trofimov's avatar Alexander.Trofimov Committed by Alexander.Trofimov

fix bug #31068

При lock одного id не сбрасывался таймер ошибки. Могла придти ошибка, т.к. callback существовал, а ответ еще не пришел.

git-svn-id: svn://192.168.3.15/activex/AVS/Sources/TeamlabOffice/trunk/OfficeWeb@66721 954022d7-b5bf-4e40-9824-e11837661b57
parent c39e0840
...@@ -414,6 +414,7 @@ ...@@ -414,6 +414,7 @@
this._locks = {}; this._locks = {};
this._msgBuffer = []; this._msgBuffer = [];
this._lockCallbacks = {}; this._lockCallbacks = {};
this._lockCallbacksErrorTimerId = {};
this._saveCallback = []; this._saveCallback = [];
this.saveLockCallbackErrorTimeOutId = null; this.saveLockCallbackErrorTimeOutId = null;
this.saveCallbackErrorTimeOutId = null; this.saveCallbackErrorTimeOutId = null;
...@@ -512,6 +513,7 @@ ...@@ -512,6 +513,7 @@
} }
// ask all elements in array // ask all elements in array
var t = this;
var i = 0; var i = 0;
var lengthArray = (arrayBlockId) ? arrayBlockId.length : 0; var lengthArray = (arrayBlockId) ? arrayBlockId.length : 0;
var isLock = false; var isLock = false;
...@@ -530,18 +532,22 @@ ...@@ -530,18 +532,22 @@
idLockInArray = (this._isExcel || this._isPresentation) ? arrayBlockId[0]['guid'] : arrayBlockId[0]; idLockInArray = (this._isExcel || this._isPresentation) ? arrayBlockId[0]['guid'] : arrayBlockId[0];
if (!isLock) { if (!isLock) {
if (this._lockCallbacksErrorTimerId.hasOwnProperty(idLockInArray)) {
// Два раза для одного id нельзя запрашивать lock, не дождавшись ответа
return;
}
//Ask //Ask
this._locks[idLockInArray] = {'state': 1};//1-asked for block this._locks[idLockInArray] = {'state': 1};//1-asked for block
if (callback && _.isFunction(callback)) { if (callback) {
this._lockCallbacks[idLockInArray] = callback; this._lockCallbacks[idLockInArray] = callback;
var lockCalbacks = this._lockCallbacks;
//Set reconnectTimeout //Set reconnectTimeout
window.setTimeout(function() { this._lockCallbacksErrorTimerId[idLockInArray] = window.setTimeout(function() {
if (lockCalbacks.hasOwnProperty(idLockInArray)) { if (t.lockCalbacks.hasOwnProperty(idLockInArray)) {
//Not signaled already //Not signaled already
callback({error: 'Timed out'}); t.lockCalbacks[idLockInArray]({error: 'Timed out'});
delete lockCalbacks[idLockInArray]; delete t.lockCalbacks[idLockInArray];
delete t._lockCallbacksErrorTimerId[idLockInArray];
} }
}, this.errorTimeOut); }, this.errorTimeOut);
} }
...@@ -764,6 +770,10 @@ ...@@ -764,6 +770,10 @@
} else { } else {
this._lockCallbacks[blockTmp]({"error": "Already locked by " + lock["user"]}); this._lockCallbacks[blockTmp]({"error": "Already locked by " + lock["user"]});
} }
if (this._lockCallbacksErrorTimerId.hasOwnProperty(blockTmp)) {
clearTimeout(this._lockCallbacksErrorTimerId[blockTmp]);
delete this._lockCallbacksErrorTimerId[blockTmp];
}
delete this._lockCallbacks[blockTmp]; delete this._lockCallbacks[blockTmp];
} }
if (this.onLocksAcquired && changed) { if (this.onLocksAcquired && changed) {
...@@ -860,6 +870,7 @@ ...@@ -860,6 +870,7 @@
// Очищаем предыдущий таймер // Очищаем предыдущий таймер
if (null !== this.saveLockCallbackErrorTimeOutId) { if (null !== this.saveLockCallbackErrorTimeOutId) {
clearTimeout(this.saveLockCallbackErrorTimeOutId); clearTimeout(this.saveLockCallbackErrorTimeOutId);
this.saveLockCallbackErrorTimeOutId = null;
} }
this._saveCallback[indexCallback] = null; this._saveCallback[indexCallback] = null;
...@@ -872,10 +883,12 @@ ...@@ -872,10 +883,12 @@
// Очищаем предыдущий таймер сохранения // Очищаем предыдущий таймер сохранения
if (null !== this.saveCallbackErrorTimeOutId) { if (null !== this.saveCallbackErrorTimeOutId) {
clearTimeout(this.saveCallbackErrorTimeOutId); clearTimeout(this.saveCallbackErrorTimeOutId);
this.saveCallbackErrorTimeOutId = null;
} }
// Очищаем предыдущий таймер снятия блокировки // Очищаем предыдущий таймер снятия блокировки
if (null !== this.unSaveLockCallbackErrorTimeOutId) { if (null !== this.unSaveLockCallbackErrorTimeOutId) {
clearTimeout(this.unSaveLockCallbackErrorTimeOutId); clearTimeout(this.unSaveLockCallbackErrorTimeOutId);
this.unSaveLockCallbackErrorTimeOutId = null;
} }
// Возвращаем состояние // Возвращаем состояние
...@@ -926,6 +939,7 @@ ...@@ -926,6 +939,7 @@
// Очищаем предыдущий таймер // Очищаем предыдущий таймер
if (null !== this.saveCallbackErrorTimeOutId) { if (null !== this.saveCallbackErrorTimeOutId) {
clearTimeout(this.saveCallbackErrorTimeOutId); clearTimeout(this.saveCallbackErrorTimeOutId);
this.saveCallbackErrorTimeOutId = null;
} }
if (-1 !== data['changesIndex']) { if (-1 !== data['changesIndex']) {
...@@ -1174,6 +1188,7 @@ ...@@ -1174,6 +1188,7 @@
sockjs.onopen = function() { sockjs.onopen = function() {
if (t.reconnectTimeout) { if (t.reconnectTimeout) {
clearTimeout(t.reconnectTimeout); clearTimeout(t.reconnectTimeout);
t.reconnectTimeout = null;
t.attemptCount = 0; t.attemptCount = 0;
} }
...@@ -1266,6 +1281,7 @@ ...@@ -1266,6 +1281,7 @@
var t = this; var t = this;
if (this.reconnectTimeout) { if (this.reconnectTimeout) {
clearTimeout(this.reconnectTimeout); clearTimeout(this.reconnectTimeout);
t.reconnectTimeout = null;
} }
++this.attemptCount; ++this.attemptCount;
this.reconnectTimeout = setTimeout(function() { this.reconnectTimeout = setTimeout(function() {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment