Commit 50f2e443 authored by Alexander.Trofimov's avatar Alexander.Trofimov Committed by Alexander.Trofimov

Вынес определение состояния соединения в отдельный файл как константы (ConnectionState).

Если мы начали сохранение и потеряли соединение, то попробуем сохранить после переподключения.

git-svn-id: svn://192.168.3.15/activex/AVS/Sources/TeamlabOffice/trunk/OfficeWeb@61816 954022d7-b5bf-4e40-9824-e11837661b57
parent e0f1d77e
......@@ -247,13 +247,6 @@
this.onRecalcLocks(e);
};
/** States
* -1 - reconnect state
* 0 - not initialized
* 1 - waiting session id
* 2 - authorized
* 3 - closed
*/
function DocsCoApi (options) {
if (options) {
this.onAuthParticipantsChanged = options.onAuthParticipantsChanged;
......@@ -271,7 +264,7 @@
this.onUnSaveLock = options.onUnSaveLock;
this.onRecalcLocks = options.onRecalcLocks;
}
this._state = 0;
this._state = ConnectionState.None;
// Online-пользователи в документе
this._participants = {};
this._countEditUsers = 0;
......@@ -330,6 +323,7 @@
this._isAuth = false;
this._documentFormatSave = 0;
this._isViewer = false;
this._isReSaveAfterAuth = false; // Флаг для сохранения после повторной авторизации (для разрыва соединения во время сохранения)
}
DocsCoApi.prototype.isRightURL = function () {
......@@ -416,7 +410,7 @@
clearTimeout(this.saveLockCallbackErrorTimeOutId);
// Проверим состояние, если мы не подсоединились, то сразу отправим ошибку
if (-1 === this.get_state()) {
if (ConnectionState.Reconnect === this.get_state()) {
this.saveLockCallbackErrorTimeOutId = window.setTimeout(function () {
if (callback && _.isFunction(callback)) {
// Фиктивные вызовы
......@@ -492,6 +486,9 @@
t._reSaveChanges();
}, this.errorTimeOutSave);
// Выставляем состояние сохранения
this._state = ConnectionState.SaveChanges;
this._send({'type': 'saveChanges', 'changes': JSON.stringify(arrayChanges.slice(startIndex, endIndex)),
'startSaveChanges': (startIndex === 0), 'endSaveChanges': (endIndex === arrayChanges.length),
'isCoAuthoring': this.isCoAuthoring, 'isExcel': this._isExcel, 'deleteIndex': this.deleteIndex,
......@@ -681,6 +678,9 @@
if (null !== this.unSaveLockCallbackErrorTimeOutId)
clearTimeout(this.unSaveLockCallbackErrorTimeOutId);
// Возвращаем состояние
this._state = ConnectionState.Authorized;
if (-1 !== data['index'])
this.changesIndex = data['index'];
......@@ -814,7 +814,7 @@
DocsCoApi.prototype._onAuth = function (data) {
if (true === this._isAuth) {
this._state = 2; // Authorized
this._state = ConnectionState.Authorized;
// Мы уже авторизовывались, нужно обновить пользователей (т.к. пользователи могли входить и выходить пока у нас не было соединения)
this._onAuthParticipantsChanged(data['participants']);
......@@ -823,6 +823,21 @@
//}
this._onMessages(data, true);
this._onGetLock(data);
if (this._isReSaveAfterAuth) {
var t = this;
var callbackAskSaveChanges = function (e) {
if (false == e["saveLock"]) {
t._reSaveChanges();
} else {
setTimeout(function () {
t.askSaveChanges(callbackAskSaveChanges);
}, 1000);
}
};
this.askSaveChanges(callbackAskSaveChanges);
}
return;
}
if (data['result'] === 1) {
......@@ -830,7 +845,7 @@
this._isAuth = true;
//TODO: add checks
this._state = 2; // Authorized
this._state = ConnectionState.Authorized;
this._id = data['sessionId'];
this._onAuthParticipantsChanged(data['participants']);
......@@ -892,7 +907,7 @@
t.attemptCount = 0;
}
t._state = 1; // Opened state
t._state = ConnectionState.WaitAuth;
if (t.onConnect) {
t.onConnect();
}
......@@ -951,10 +966,17 @@
}
};
sockjs.onclose = function (evt) {
t._state = -1; // Reconnect state
if (ConnectionState.SaveChanges === t._state) {
// Мы сохраняли изменения и разорвалось соединение
t._isReSaveAfterAuth = true;
// Очищаем предыдущий таймер
if (null !== t.saveCallbackErrorTimeOutId)
clearTimeout(t.saveCallbackErrorTimeOutId);
}
t._state = ConnectionState.Reconnect;
var bIsDisconnectAtAll = t.attemptCount >= t.maxAttemptCount || t.isCloseCoAuthoring;
if (bIsDisconnectAtAll)
t._state = 3; // Closed state
t._state = ConnectionState.Closed;
if (t.isCloseCoAuthoring)
return;
if (t.onDisconnect)
......
"use strict"; /* docscoapicommon.js * * Author: Alexander.Trofimov * Date: 09.11.12 */( /** * @param {Window} window * @param {undefined} undefined */ function (window, undefined) { /* * Import * ----------------------------------------------------------------------------- */ var asc = window["Asc"] ? window["Asc"] : (window["Asc"] = {}); var prot; /** * Класс user для совместного редактирования/просмотра документа * ----------------------------------------------------------------------------- * * @constructor * @memberOf Asc */ function asc_CUser (val) { this.id = null; // уникальный id - пользователя this.userName = null; // имя пользователя this.state = undefined; // состояние (true - подключен, false - отключился) this.indexUser = -1; // Индекс пользователя (фактически равно числу заходов в документ на сервере) this.color = null; // цвет пользователя this.view = false; // просмотр(true), редактор(false) this._setUser(val); return this; } asc_CUser.prototype._setUser = function (val) { if (val) { this.id = val['id']; this.userName = val['username']; this.indexUser = val['indexUser']; this.color = c_oAscArrUserColors[this.indexUser % c_oAscArrUserColors.length]; this.state = val['state']; this.view = val['view']; } }; asc_CUser.prototype.asc_getId = function () { return this.id; }; asc_CUser.prototype.asc_getUserName = function () { return this.userName; }; asc_CUser.prototype.asc_getState = function () { return this.state; }; asc_CUser.prototype.asc_getColor = function () { return '#' + ('000000' + this.color.toString(16)).substr(-6); }; asc_CUser.prototype.asc_getColorValue = function () { return this.color; }; asc_CUser.prototype.asc_getView = function () { return this.view; }; asc_CUser.prototype.asc_setId = function (val) { this.id = val; }; asc_CUser.prototype.asc_setUserName = function (val) { this.userName = val; }; asc_CUser.prototype.asc_setState = function (val) { this.state = val; }; asc_CUser.prototype.asc_setColor = function (val) { this.color = val; }; /* * Export * ----------------------------------------------------------------------------- */ window["Asc"]["asc_CUser"] = window["Asc"].asc_CUser = asc_CUser; prot = asc_CUser.prototype; prot["asc_getId"] = prot.asc_getId; prot["asc_getUserName"] = prot.asc_getUserName; prot["asc_getState"] = prot.asc_getState; prot["asc_setId"] = prot.asc_setId; prot["asc_getColor"] = prot.asc_getColor; prot["asc_getColorValue"] = prot.asc_getColorValue; prot["asc_getView"] = prot.asc_getView; prot["asc_setUserName"] = prot.asc_setUserName; prot["asc_setState"] = prot.asc_setState; prot["asc_setColor"] = prot.asc_setColor; } )(window);
\ No newline at end of file
"use strict"; /* docscoapicommon.js * * Author: Alexander.Trofimov * Date: 09.11.12 */( /** * @param {Window} window * @param {undefined} undefined */ function (window, undefined) { /* * Import * ----------------------------------------------------------------------------- */ var asc = window["Asc"] ? window["Asc"] : (window["Asc"] = {}); var prot; /** * Класс user для совместного редактирования/просмотра документа * ----------------------------------------------------------------------------- * * @constructor * @memberOf Asc */ function asc_CUser (val) { this.id = null; // уникальный id - пользователя this.userName = null; // имя пользователя this.state = undefined; // состояние (true - подключен, false - отключился) this.indexUser = -1; // Индекс пользователя (фактически равно числу заходов в документ на сервере) this.color = null; // цвет пользователя this.view = false; // просмотр(true), редактор(false) this._setUser(val); return this; } asc_CUser.prototype._setUser = function (val) { if (val) { this.id = val['id']; this.userName = val['username']; this.indexUser = val['indexUser']; this.color = c_oAscArrUserColors[this.indexUser % c_oAscArrUserColors.length]; this.state = val['state']; this.view = val['view']; } }; asc_CUser.prototype.asc_getId = function () { return this.id; }; asc_CUser.prototype.asc_getUserName = function () { return this.userName; }; asc_CUser.prototype.asc_getState = function () { return this.state; }; asc_CUser.prototype.asc_getColor = function () { return '#' + ('000000' + this.color.toString(16)).substr(-6); }; asc_CUser.prototype.asc_getColorValue = function () { return this.color; }; asc_CUser.prototype.asc_getView = function () { return this.view; }; asc_CUser.prototype.asc_setId = function (val) { this.id = val; }; asc_CUser.prototype.asc_setUserName = function (val) { this.userName = val; }; asc_CUser.prototype.asc_setState = function (val) { this.state = val; }; asc_CUser.prototype.asc_setColor = function (val) { this.color = val; }; /* * Export * ----------------------------------------------------------------------------- */ window["Asc"]["asc_CUser"] = window["Asc"].asc_CUser = asc_CUser; prot = asc_CUser.prototype; prot["asc_getId"] = prot.asc_getId; prot["asc_getUserName"] = prot.asc_getUserName; prot["asc_getState"] = prot.asc_getState; prot["asc_setId"] = prot.asc_setId; prot["asc_getColor"] = prot.asc_getColor; prot["asc_getColorValue"] = prot.asc_getColorValue; prot["asc_getView"] = prot.asc_getView; prot["asc_setUserName"] = prot.asc_setUserName; prot["asc_setState"] = prot.asc_setState; prot["asc_setColor"] = prot.asc_setColor; } )(window); var ConnectionState = { Reconnect : -1, // reconnect state None : 0, // not initialized WaitAuth : 1, // waiting session id Authorized : 2, // authorized Closed : 3, // closed SaveChanges : 4 // save };
\ No newline at end of file
......
......@@ -1705,7 +1705,7 @@ var ASC_DOCS_API_USE_EMBEDDED_FONTS = "@@ASC_DOCS_API_USE_EMBEDDED_FONTS";
* @param {Bool} isCloseCoAuthoring
*/
this.CoAuthoringApi.onDisconnect = function (e, isDisconnectAtAll, isCloseCoAuthoring) {
if (0 === t.CoAuthoringApi.get_state())
if (ConnectionState.None === t.CoAuthoringApi.get_state())
t.asyncServerIdEndLoaded();
if (isDisconnectAtAll) {
// Посылаем наверх эвент об отключении от сервера
......@@ -1961,7 +1961,7 @@ var ASC_DOCS_API_USE_EMBEDDED_FONTS = "@@ASC_DOCS_API_USE_EMBEDDED_FONTS";
this.collaborativeEditing.sendChanges();
} else {
nState = t.CoAuthoringApi.get_state();
if (3 === nState) {
if (ConnectionState.Close === nState) {
// Отключаемся от сохранения, соединение потеряно
if (!this.isAutoSave)
this.asc_EndAction(c_oAscAsyncActionType.Information, c_oAscAsyncAction.Save);
......
......@@ -520,7 +520,7 @@ asc_docs_api.prototype._coAuthoringInit = function () {
* @param {Bool} isCloseCoAuthoring
*/
this.CoAuthoringApi.onDisconnect = function (e, isDisconnectAtAll, isCloseCoAuthoring) {
if (0 === t.CoAuthoringApi.get_state())
if (ConnectionState.None === t.CoAuthoringApi.get_state())
t.asyncServerIdEndLoaded();
if (isDisconnectAtAll) {
// Посылаем наверх эвент об отключении от сервера
......@@ -1468,7 +1468,7 @@ function OnSave_Callback(e) {
CollaborativeEditing.Send_Changes();
} else {
var nState = editor.CoAuthoringApi.get_state();
if (3 === nState) {
if (ConnectionState.Close === nState) {
// Отключаемся от сохранения, соединение потеряно
editor.canSave = true;
} else {
......
......@@ -1414,7 +1414,7 @@ asc_docs_api.prototype._coAuthoringInit = function()
* @param {Bool} isCloseCoAuthoring
*/
this.CoAuthoringApi.onDisconnect = function (e, isDisconnectAtAll, isCloseCoAuthoring) {
if (0 === t.CoAuthoringApi.get_state())
if (ConnectionState.None === t.CoAuthoringApi.get_state())
t.asyncServerIdEndLoaded();
if (isDisconnectAtAll) {
// Посылаем наверх эвент об отключении от сервера
......@@ -2268,7 +2268,7 @@ function OnSave_Callback(e) {
CollaborativeEditing.Send_Changes();
} else {
var nState = editor.CoAuthoringApi.get_state();
if (3 === nState) {
if (ConnectionState.Close === nState) {
// Отключаемся от сохранения, соединение потеряно
editor.canSave = true;
} else {
......
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