From 00cc63b7cd8ed504f1ee0aac5d2cd81da7d3cebc Mon Sep 17 00:00:00 2001 From: Book Pauk Date: Thu, 23 Jan 2020 15:54:46 +0700 Subject: [PATCH] =?UTF-8?q?WebSocket:=20=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=20=D0=BC=D0=B5=D1=82=D0=BE=D0=B4=20get-confi?= =?UTF-8?q?g?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- client/api/misc.js | 16 ++++++++++++++-- client/api/reader.js | 7 ++----- ...ocketConnection.js => webSocketConnection.js} | 2 +- server/controllers/WebSocketController.js | 12 ++++++++++++ 4 files changed, 29 insertions(+), 8 deletions(-) rename client/api/{WebSocketConnection.js => webSocketConnection.js} (99%) diff --git a/client/api/misc.js b/client/api/misc.js index 79d56d0e..1e63138a 100644 --- a/client/api/misc.js +++ b/client/api/misc.js @@ -1,4 +1,5 @@ import axios from 'axios'; +import wsc from './webSocketConnection'; const api = axios.create({ baseURL: '/api' @@ -6,9 +7,20 @@ const api = axios.create({ class Misc { async loadConfig() { - const response = await api.post('/config', {params: [ + + const query = {params: [ 'name', 'version', 'mode', 'maxUploadFileSize', 'useExternalBookConverter', 'branch', - ]}); + ]}; + + try { + await wsc.open(); + return await wsc.message(wsc.send(Object.assign({action: 'get-config'}, query))); + } catch (e) { + console.error(e); + } + + //если WebSocket проблема, работаем по http + const response = await api.post('/config', query); return response.data; } } diff --git a/client/api/reader.js b/client/api/reader.js index 6149a1fc..1ff1e187 100644 --- a/client/api/reader.js +++ b/client/api/reader.js @@ -1,6 +1,6 @@ import axios from 'axios'; import * as utils from '../share/utils'; -import WebSocketConnection from './WebSocketConnection'; +import wsc from './webSocketConnection'; const api = axios.create({ baseURL: '/api/reader' @@ -12,7 +12,6 @@ const workerApi = axios.create({ class Reader { constructor() { - this.wsc = new WebSocketConnection(); } async getStateFinish(workerId, callback) { @@ -21,7 +20,6 @@ class Reader { let response = {}; try { - const wsc = this.wsc; await wsc.open(); const requestId = wsc.send({action: 'worker-get-state-finish', workerId}); @@ -35,11 +33,10 @@ class Reader { } return response; } catch (e) { - // console.error(e); } - //с WebSocket проблема, проверяем по http + //если WebSocket проблема, работаем по http const refreshPause = 500; let i = 0; response = {}; diff --git a/client/api/WebSocketConnection.js b/client/api/webSocketConnection.js similarity index 99% rename from client/api/WebSocketConnection.js rename to client/api/webSocketConnection.js index a3a67f2b..e5b79789 100644 --- a/client/api/WebSocketConnection.js +++ b/client/api/webSocketConnection.js @@ -169,4 +169,4 @@ class WebSocketConnection { } } -export default WebSocketConnection; \ No newline at end of file +export default new WebSocketConnection(); \ No newline at end of file diff --git a/server/controllers/WebSocketController.js b/server/controllers/WebSocketController.js index 1c9728c9..a3f18098 100644 --- a/server/controllers/WebSocketController.js +++ b/server/controllers/WebSocketController.js @@ -1,4 +1,6 @@ const WebSocket = require ('ws'); +const _ = require('lodash'); + const WorkerState = require('../core/WorkerState');//singleton const utils = require('../core/utils'); @@ -42,6 +44,8 @@ class WebSocketController { switch (req.action) { case 'test': this.test(req, ws); break; + case 'get-config': + this.getConfig(req, ws); break; case 'worker-get-state': this.workerGetState(req, ws); break; case 'worker-get-state-finish': @@ -70,6 +74,14 @@ class WebSocketController { this.send({message: 'Liberama project is awesome'}, req, ws); } + async getConfig(req, ws) { + if (Array.isArray(req.params)) { + this.send(_.pick(this.config, req.params), req, ws); + } else { + throw new Error('params is not an array'); + } + } + async workerGetState(req, ws) { if (!req.workerId) throw new Error(`key 'workerId' is wrong`);