This commit is contained in:
xiaofeng.mxf 2020-01-01 16:18:54 +08:00
parent 65f530047a
commit d9f2e7528c
5 changed files with 54 additions and 47 deletions

3
.gitignore vendored
View File

@ -35,4 +35,5 @@ test/report
doc_compiled.md
docs-md/cn/doc.md
docs-md/en/doc.md
docs/gitbook/gitbook-plugin-livereload/
docs/gitbook/gitbook-plugin-livereload/
node_modules

View File

@ -86,11 +86,22 @@ class Recorder extends events.EventEmitter {
this.globalId = 1;
this.cachePath = getCacheDir();
this.db = new Datastore();
this.db.persistence.setAutocompactionInterval(5001);
this.recordBodyMap = []; // id - body
}
setDbAutoCompact() {
this.db.persistence.setAutocompactionInterval(5001);
}
stopDbAutoCompact() {
try {
this.db.persistence.stopAutocompaction();
} catch (e) {
logUtil.printLog(e, logUtil.T_ERR);
}
}
emitUpdate(id, info) {
const self = this;
if (info) {
@ -333,6 +344,7 @@ class Recorder extends events.EventEmitter {
}
clear() {
logUtil.printLog('clearing cache file...');
const self = this;
proxyUtil.deleteFolderContentsRecursive(self.cachePath, true);
}

View File

@ -216,8 +216,6 @@ function deleteFolderContentsRecursive(dirPath, ifClearFolderItself) {
throw new Error('can_not_delete_this_dir');
}
logUtil.info('==>>> clearing cache ', dirPath);
if (fs.existsSync(dirPath)) {
fs.readdirSync(dirPath).forEach((file) => {
const curPath = path.join(dirPath, file);

View File

@ -308,11 +308,15 @@ class webInterface extends events.EventEmitter {
}
close() {
this.server && this.server.close();
this.wsServer && this.wsServer.closeAll();
this.server = null;
this.wsServer = null;
this.proxyInstance = null;
const self = this;
return new Promise((resolve, reject) => {
self.server && self.server.close();
self.wsServer && self.wsServer.closeAll();
self.server = null;
self.wsServer = null;
self.proxyInstance = null;
resolve();
});
}
}

View File

@ -248,7 +248,6 @@ class ProxyCore extends events.EventEmitter {
return self;
}
/**
* close the proxy server
*
@ -326,54 +325,47 @@ class ProxyServer extends ProxyCore {
}
start() {
if (this.recorder) {
this.recorder.setDbAutoCompact();
}
// start web interface if neeeded
if (this.proxyWebinterfaceConfig && this.proxyWebinterfaceConfig.enable) {
this.webServerInstance = new WebInterface(this.proxyWebinterfaceConfig, this.recorder);
// start web server
this.webServerInstance.start().then(() => {
// start proxy core
super.start();
})
.catch((e) => {
this.emit('error', e);
});
this.webServerInstance.start()
// start proxy core
.then(() => {
super.start();
})
.catch((e) => {
this.emit('error', e);
});
} else {
super.start();
}
}
close() {
return new Promise((resolve, reject) => {
super.close()
.then((error) => {
if (error) {
resolve(error);
}
});
const self = this;
// release recorder
if (self.recorder) {
self.recorder.stopDbAutoCompact();
self.recorder.clear();
}
self.recorder = null;
if (this.recorder) {
logUtil.printLog('clearing cache file...');
this.recorder.clear();
}
const tmpWebServer = this.webServerInstance;
this.recorder = null;
this.webServerInstance = null;
if (tmpWebServer) {
logUtil.printLog('closing webserver...');
tmpWebServer.close((error) => {
if (error) {
console.error(error);
logUtil.printLog(`proxy web server close FAILED: ${error.message}`, logUtil.T_ERR);
} else {
logUtil.printLog(`proxy web server closed at ${this.proxyHostName} : ${this.webPort}`);
}
resolve(error);
})
} else {
resolve(null);
}
});
// close ProxyCore
return super.close()
// release webInterface
.then(() => {
if (self.webServerInstance) {
const tmpWebServer = self.webServerInstance;
self.webServerInstance = null;
logUtil.printLog('closing webInterface...');
return tmpWebServer.close();
}
});
}
}