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

This commit is contained in:
Book Pauk
2020-02-11 11:16:32 +07:00
parent 085cc47ea5
commit 2484568b21
3 changed files with 18 additions and 10 deletions

View File

@@ -18,17 +18,22 @@ class Reader {
if (!callback) callback = () => {}; if (!callback) callback = () => {};
let response = {}; let response = {};
try { try {
await wsc.open(); await wsc.open();
const requestId = wsc.send({action: 'worker-get-state-finish', workerId}); const requestId = wsc.send({action: 'worker-get-state-finish', workerId});
let prevResponse = false;
while (1) {// eslint-disable-line no-constant-condition while (1) {// eslint-disable-line no-constant-condition
response = await wsc.message(requestId); response = await wsc.message(requestId);
callback(response);
if (!response.state) if (!response.state && prevResponse !== false) {//экономия траффика
throw new Error('Неверный ответ api'); callback(prevResponse);
} else {//были изменения worker state
if (!response.state)
throw new Error('Неверный ответ api');
callback(response);
prevResponse = response;
}
if (response.state == 'finish' || response.state == 'error') { if (response.state == 'finish' || response.state == 'error') {
break; break;
@@ -127,6 +132,9 @@ class Reader {
response = await api.post('/restore-cached-file', {path: url}); response = await api.post('/restore-cached-file', {path: url});
response = response.data; response = response.data;
} }
if (response.state == 'error') {
throw new Error(response.error);
}
const workerId = response.workerId; const workerId = response.workerId;
if (!workerId) if (!workerId)
@@ -215,6 +223,9 @@ class Reader {
const state = response.state; const state = response.state;
if (!state) if (!state)
throw new Error('Неверный ответ api'); throw new Error('Неверный ответ api');
if (response.state == 'error') {
throw new Error(response.error);
}
return response; return response;
} }

View File

@@ -111,11 +111,7 @@ class WebSocketConnection {
requestId, requestId,
timeout, timeout,
onMessage: (mes) => { onMessage: (mes) => {
if (mes.error) { resolve(mes);
reject(mes.error);
} else {
resolve(mes);
}
}, },
onError: (e) => { onError: (e) => {
reject(e); reject(e);

View File

@@ -122,9 +122,10 @@ class WebSocketController {
while (1) {// eslint-disable-line no-constant-condition while (1) {// eslint-disable-line no-constant-condition
const prevProgress = state.progress || -1; const prevProgress = state.progress || -1;
const prevState = state.state || ''; const prevState = state.state || '';
const lastModified = state.lastModified || 0;
state = this.workerState.getState(req.workerId); 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) break;
if (state.state != 'finish' && state.state != 'error') if (state.state != 'finish' && state.state != 'error')