Доработка общения по вебсокету
This commit is contained in:
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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')
|
||||||
|
|||||||
Reference in New Issue
Block a user