From 4d63363344d5cc590f023caafa89e73c2416495e Mon Sep 17 00:00:00 2001 From: "Alexander.Trofimov" Date: Tue, 7 Apr 2015 11:20:05 +0000 Subject: [PATCH] =?UTF-8?q?=D0=9F=D1=80=D0=B8=20=D0=BE=D1=82=D0=BF=D1=80?= =?UTF-8?q?=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=D0=B8=D0=B8=20=D0=BD=D0=B0=20?= =?UTF-8?q?=D1=81=D0=BE=D1=85=D1=80=D0=B0=D0=BD=D0=B5=D0=BD=D0=B8=D0=B5=20?= =?UTF-8?q?=D0=B4=D0=BE=D0=B6=D0=B8=D0=B4=D0=B0=D0=B5=D0=BC=D1=81=D1=8F,?= =?UTF-8?q?=20=D0=BF=D0=BE=D0=BA=D0=B0=20=D0=B4=D0=B0=D0=BD=D0=BD=D1=8B?= =?UTF-8?q?=D0=B5=20=D0=B7=D0=B0=D0=BF=D0=B8=D1=88=D1=83=D1=82=D1=81=D1=8F?= =?UTF-8?q?=20=D0=B2=20=D0=B1=D0=B0=D0=B7=D1=83=20=D0=B4=D0=B0=D0=BD=D0=BD?= =?UTF-8?q?=D1=8B=D1=85.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: svn://192.168.3.15/activex/AVS/Sources/TeamlabOffice/trunk/nodeJSProjects@61881 954022d7-b5bf-4e40-9824-e11837661b57 --- CoAuthoring/sources/DocsCoServer.js | 19 +++++++++++++++---- CoAuthoring/sources/baseConnector.js | 4 ++++ 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/CoAuthoring/sources/DocsCoServer.js b/CoAuthoring/sources/DocsCoServer.js index 2409a8b4..02f438d6 100644 --- a/CoAuthoring/sources/DocsCoServer.js +++ b/CoAuthoring/sources/DocsCoServer.js @@ -102,6 +102,7 @@ var c_oAscServerCommandErrors = { }; var c_oAscSaveTimeOutDelay = 5000; // Время ожидания для сохранения на сервере (для отработки F5 в браузере) +var c_oAscLockTimeOutDelay = 500; // Время ожидания для сохранения, когда зажата база данных var c_oAscRecalcIndexTypes = { RecalcIndexAdd: 1, @@ -625,9 +626,7 @@ exports.install = function (server, callbackFunction) { // Send changes to save server oPucker = objServicePucker[docId]; if (oPucker && oPucker.inDataBase && 0 !== oPucker.index) { - saveTimers[docId] = setTimeout(function () { - sendChangesToServer(docId); - }, c_oAscSaveTimeOutDelay); + _createSaveTimer(docId); } else { // Отправляем, что все ушли и нет изменений (чтобы выставить статус на сервере об окончании редактирования) deletePucker(docId); @@ -1488,6 +1487,18 @@ exports.install = function (server, callbackFunction) { return !isLock; } + function _createSaveTimer (docId) { + var oTimeoutFunction = function () { + if (sqlBase.isLockCriticalSection(docId)) + saveTimers[docId] = setTimeout(oTimeoutFunction, c_oAscLockTimeOutDelay); + else { + delete saveTimers[docId]; + sendChangesToServer(docId); + } + }; + saveTimers[docId] = setTimeout(oTimeoutFunction, c_oAscSaveTimeOutDelay); + } + sockjs_echo.installHandlers(server, {prefix:'/doc/[0-9-.a-zA-Z_=]*/c', log:function (severity, message) { //TODO: handle severity logger.info(message); @@ -1525,7 +1536,7 @@ exports.install = function (server, callbackFunction) { for (docId in objServiceInfo) { // Если есть информация для сборки, то запускаем. Иначе - удаляем подписчика? : ToDo if (objServicePucker[docId]) - saveTimers[docId] = createTimer(docId); + _createSaveTimer(docId); else deleteCallback(docId); } diff --git a/CoAuthoring/sources/baseConnector.js b/CoAuthoring/sources/baseConnector.js index e7961cbd..216e46ec 100644 --- a/CoAuthoring/sources/baseConnector.js +++ b/CoAuthoring/sources/baseConnector.js @@ -154,6 +154,10 @@ exports.updateIndexUser = function (docId, indexUser) { baseConnector.sqlQuery(sqlCommand); }; +exports.isLockCriticalSection = function (id) { + return !!(g_oCriticalSection[id]); +}; + // Критическая секция function lockCriticalSection (id, callback) { if (g_oCriticalSection[id]) {