From 2484568b2156496d637c3692ca4abd043bd40042 Mon Sep 17 00:00:00 2001 From: Book Pauk Date: Tue, 11 Feb 2020 11:16:32 +0700 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D1=80=D0=B0=D0=B1=D0=BE=D1=82?= =?UTF-8?q?=D0=BA=D0=B0=20=D0=BE=D0=B1=D1=89=D0=B5=D0=BD=D0=B8=D1=8F=20?= =?UTF-8?q?=D0=BF=D0=BE=20=D0=B2=D0=B5=D0=B1=D1=81=D0=BE=D0=BA=D0=B5=D1=82?= =?UTF-8?q?=D1=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- client/api/reader.js | 19 +++++++++++++++---- client/api/webSocketConnection.js | 6 +----- server/controllers/WebSocketController.js | 3 ++- 3 files changed, 18 insertions(+), 10 deletions(-) diff --git a/client/api/reader.js b/client/api/reader.js index c17cccef..a38328ca 100644 --- a/client/api/reader.js +++ b/client/api/reader.js @@ -18,17 +18,22 @@ class Reader { if (!callback) callback = () => {}; let response = {}; - try { await wsc.open(); const requestId = wsc.send({action: 'worker-get-state-finish', workerId}); + let prevResponse = false; while (1) {// eslint-disable-line no-constant-condition response = await wsc.message(requestId); - callback(response); - if (!response.state) - throw new Error('Неверный ответ api'); + if (!response.state && prevResponse !== false) {//экономия траффика + callback(prevResponse); + } else {//были изменения worker state + if (!response.state) + throw new Error('Неверный ответ api'); + callback(response); + prevResponse = response; + } if (response.state == 'finish' || response.state == 'error') { break; @@ -127,6 +132,9 @@ class Reader { response = await api.post('/restore-cached-file', {path: url}); response = response.data; } + if (response.state == 'error') { + throw new Error(response.error); + } const workerId = response.workerId; if (!workerId) @@ -215,6 +223,9 @@ class Reader { const state = response.state; if (!state) throw new Error('Неверный ответ api'); + if (response.state == 'error') { + throw new Error(response.error); + } return response; } diff --git a/client/api/webSocketConnection.js b/client/api/webSocketConnection.js index bbcb21a3..e5b79789 100644 --- a/client/api/webSocketConnection.js +++ b/client/api/webSocketConnection.js @@ -111,11 +111,7 @@ class WebSocketConnection { requestId, timeout, onMessage: (mes) => { - if (mes.error) { - reject(mes.error); - } else { - resolve(mes); - } + resolve(mes); }, onError: (e) => { reject(e); diff --git a/server/controllers/WebSocketController.js b/server/controllers/WebSocketController.js index 33b61a0b..af73f175 100644 --- a/server/controllers/WebSocketController.js +++ b/server/controllers/WebSocketController.js @@ -122,9 +122,10 @@ class WebSocketController { while (1) {// eslint-disable-line no-constant-condition const prevProgress = state.progress || -1; const prevState = state.state || ''; + const lastModified = state.lastModified || 0; state = this.workerState.getState(req.workerId); - this.send((state ? state : {}), req, ws); + this.send((state && lastModified != state.lastModified ? state : {}), req, ws); if (!state) break; if (state.state != 'finish' && state.state != 'error')