Рефакторинг

This commit is contained in:
Book Pauk
2019-10-28 23:30:02 +07:00
parent b64985349e
commit 9ebdbc81d0
4 changed files with 25 additions and 12 deletions

View File

@@ -1,12 +1,13 @@
const BaseController = require('./BaseController'); const BaseController = require('./BaseController');
const ReaderWorker = require('../core/ReaderWorker'); const ReaderWorker = require('../core/ReaderWorker');
const readerStorage = require('../core/readerStorage'); const readerStorage = require('../core/readerStorage');
const workerState = require('../core/workerState'); const WorkerState = require('../core/WorkerState');//singleton
class ReaderController extends BaseController { class ReaderController extends BaseController {
constructor(config) { constructor(config) {
super(config); super(config);
this.readerWorker = new ReaderWorker(config); this.readerWorker = new ReaderWorker(config);
this.workerState = new WorkerState();
} }
async loadBook(req, res) { async loadBook(req, res) {
@@ -19,7 +20,7 @@ class ReaderController extends BaseController {
url: request.url, url: request.url,
enableSitesFilter: (request.hasOwnProperty('enableSitesFilter') ? request.enableSitesFilter : true) enableSitesFilter: (request.hasOwnProperty('enableSitesFilter') ? request.enableSitesFilter : true)
}); });
const state = workerState.getState(workerId); const state = this.workerState.getState(workerId);
return (state ? state : {}); return (state ? state : {});
} catch (e) { } catch (e) {
error = e.message; error = e.message;

View File

@@ -1,7 +1,12 @@
const BaseController = require('./BaseController'); const BaseController = require('./BaseController');
const workerState = require('../core/workerState'); const WorkerState = require('../core/WorkerState');//singleton
class WorkerController extends BaseController { class WorkerController extends BaseController {
constructor(config) {
super(config);
this.workerState = new WorkerState();
}
async getState(req, res) { async getState(req, res) {
const request = req.body; const request = req.body;
let error = ''; let error = '';
@@ -9,7 +14,7 @@ class WorkerController extends BaseController {
if (!request.workerId) if (!request.workerId)
throw new Error(`key 'workerId' is wrong`); throw new Error(`key 'workerId' is wrong`);
const state = workerState.getState(request.workerId); const state = this.workerState.getState(request.workerId);
return (state ? state : {}); return (state ? state : {});
} catch (e) { } catch (e) {
error = e.message; error = e.message;

View File

@@ -1,7 +1,7 @@
const fs = require('fs-extra'); const fs = require('fs-extra');
const path = require('path'); const path = require('path');
const workerState = require('./workerState'); const WorkerState = require('./WorkerState');//singleton
const FileDownloader = require('./FileDownloader'); const FileDownloader = require('./FileDownloader');
const FileDecompressor = require('./FileDecompressor'); const FileDecompressor = require('./FileDecompressor');
const BookConverter = require('./BookConverter'); const BookConverter = require('./BookConverter');
@@ -20,6 +20,7 @@ class ReaderWorker {
this.config.tempPublicDir = `${config.publicDir}/tmp`; this.config.tempPublicDir = `${config.publicDir}/tmp`;
fs.ensureDirSync(this.config.tempPublicDir); fs.ensureDirSync(this.config.tempPublicDir);
this.workerState = new WorkerState();
this.down = new FileDownloader(); this.down = new FileDownloader();
this.decomp = new FileDecompressor(); this.decomp = new FileDecompressor();
this.bookConverter = new BookConverter(this.config); this.bookConverter = new BookConverter(this.config);
@@ -106,8 +107,8 @@ class ReaderWorker {
} }
loadBookUrl(opts) { loadBookUrl(opts) {
const workerId = workerState.generateWorkerId(); const workerId = this.workerState.generateWorkerId();
const wState = workerState.getControl(workerId); const wState = this.workerState.getControl(workerId);
wState.set({state: 'start'}); wState.set({state: 'start'});
this.loadBook(opts, wState); this.loadBook(opts, wState);

View File

@@ -3,10 +3,18 @@ const utils = require('./utils');
const cleanInterval = 3600; //sec const cleanInterval = 3600; //sec
const cleanAfterLastModified = cleanInterval - 60; //sec const cleanAfterLastModified = cleanInterval - 60; //sec
let instance = null;
//singleton
class WorkerState { class WorkerState {
constructor() { constructor() {
this.states = {}; if (!instance) {
setTimeout(this.cleanStates.bind(this), cleanInterval*1000); this.states = {};
this.cleanStates();
instance = this;
}
return instance;
} }
generateWorkerId() { generateWorkerId() {
@@ -51,6 +59,4 @@ class WorkerState {
} }
} }
const workerState = new WorkerState(); module.exports = WorkerState;
module.exports = workerState;