Browse Source

Рефакторинг

Book Pauk 5 years ago
parent
commit
9ebdbc81d0

+ 3 - 2
server/controllers/ReaderController.js

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

+ 7 - 2
server/controllers/WorkerController.js

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

+ 4 - 3
server/core/ReaderWorker.js

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

+ 11 - 5
server/core/workerState.js → server/core/WorkerState.js

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