Browse Source

Доработка общения по вебсокету

Book Pauk 5 years ago
parent
commit
2484568b21

+ 15 - 4
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;
     }

+ 1 - 5
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);

+ 2 - 1
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')