Рефакторинг
This commit is contained in:
@@ -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;
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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;
|
|
||||||
Reference in New Issue
Block a user